2012-12-06 41 views
2

我正在學習更多關於這個世界的知識。 而在我的測試中,我發現了這個奇怪:.net 3.5中的協變

[TestMethod] 
    public void VarianceTest() 
    { 
     List<string> listValues = new List<string>(); 
     string[] arrayValues = listValues.ToArray(); 
     var result = HelperCoVariant.GetTest<int>(listValues); // error to compile 
     var result2 = HelperCoVariant.GetTest<int>(arrayValues); // sucess 
    } 

任何方法:

public static class HelperCoVariant 
{ 
    public static IEnumerable<T> GetTest<T>(this IEnumerable<object> t) 
    { 
     foreach (var item in t) 
     { 
      yield return (T)item; 
     } 
    } 
} 

我明白了。 .NET 4的作品完美,因爲

IEnumerable<out T>

但爲什麼。 NET 3.5,有這種行爲?

+0

因爲C#3不支持泛型類型的協變或逆變... –

回答