File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeStyle\ForEachExplicitCastInSourcePreference.cs
Web Access
Project: src\src\CodeStyle\Core\Analyzers\Microsoft.CodeAnalysis.CodeStyle.csproj (Microsoft.CodeAnalysis.CodeStyle)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Collections.Generic;
 
namespace Microsoft.CodeAnalysis.CodeStyle;
 
/// <summary>
/// Preferences if a foreach statement is allowed to have an explicit cast not visible in source.
/// </summary>
internal enum ForEachExplicitCastInSourcePreference
{
    /// <summary>
    /// Hidden explicit casts are not allowed.  In any location where one might be emitted, users must supply their
    /// own explicit cast to make it apparent that the code may fail at runtime.
    /// </summary>
    Always,
 
    /// <summary>
    /// Hidden casts are allowed on legacy APIs but not allowed on strongly-typed modern APIs.  An API is considered
    /// legacy if enumerating it would produce values of type <see cref="object"/> or itself does not implement <see
    /// cref="IEnumerable{T}"/>.  These represent APIs that existed prior to the widespread adoption of generics and
    /// are the reason the language allowed this explicit conversion to not be stated for convenience.  With
    /// generics though it is more likely that an explicit cast emitted is an error and the user put in an incorrect
    /// type errantly and would benefit from an alert about the issue.
    /// </summary>
    WhenStronglyTyped,
}