私はこの EnumHelper メソッドを書きました
public static IEnumerable<T> AsEnumerable<TEnum, T>(Func<TEnum, T> projection = null) where TEnum : struct
{
if (!typeof(TEnum).IsEnum)
throw new InvalidOperationException("Type parameter TEnum must be an enum");
if (projection == null)
return Enum.GetValues(typeof (TEnum)).OfType<TEnum>();
return Enum.GetValues(typeof (TEnum)).OfType<TEnum>().Select(projection);
}
最初のリターンでコンパイル時エラーが発生します。それはIEnumerable<TEnum>
エラー 46 型System.Collections.Generic.IEnumerable<TEnum>
を暗黙的に変換できませんSystem.Collections.Generic.IEnumerable<T>
には制約がないT
ため、T
より一般的ですTEnum
。inIEnumerable<out T>
T
は共変ですが、なぜエラーが発生するのですか?