File: ForEachExplicitCastInSourcePreference.cs
Web Access
Project: ..\..\..\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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,
    }
}