的IEnumerable的
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
更通用。在IEnumerable<out T>
T
是convariant,所以爲什麼我仍然得到錯誤?
協方差在這裏並不適用;編譯器如何知道'T'和'TEnum'之間的關係? (它不) –
C#中值類型不支持協方差。 「where TEnum:struct」 –
@Mark因爲T可以是任何東西,因爲我沒有約束,所以你應該能夠返回任何東西來代替T –