2010-12-16 11 views
2

Code-Snip 1) kompiliert nicht, und ich brauche z. um die Besetzung wie in Snip 2) wenn ich aus irgendeinem Grund Test erklärt werden wollen, wie es ist. Aber warum kann der Compiler diese Besetzung nicht machen, dies ist z.B. die Besetzung für Schnipsel 3)Cast IList zu IEnumerable

1)

static IDictionary<int, IEnumerable<int>> DoStuff() 
{ 
    var test = new Dictionary<int, IList<int>>() { { 1, new List<int>() { 1, 2 } } }; 
    return test; 
} 

2)

static IDictionary<int, IEnumerable<int>> DoStuff() 
{ 
    var test = new Dictionary<int, IList<int>>() { { 1, new List<int>() { 1, 2 } } }; 
    return test.ToDictionary(item => item.Key, item => (IEnumerable<int>)item.Value); 
} 

3)

static IEnumerable<int> DoStuff() 
{ 
    var test = new List<int>() { 1, 2 }; 
    return test; 
} 

Antwort

3

Variance in .NET 4 unterstützt wird, aber in Ihrem Fall, netiher IDictionary <> noch IList <> sind Variantentypen können daher nicht sein automatisch in ein anderes IDictionary konvertiert <>.

3

Es ist, weil IDictionary<int, IList<int>> nicht erben/Arbeitsgeräte IDictionary<int, IEnumerable<int>>

Ihr erstes Beispiel kann dies geändert werden und funktionieren soll:

static IDictionary<int, IEnumerable<int>> DoStuff() 
{ 
    var test = new Dictionary<int, IEnumerable<int>>() { { 1, new List<int>() { 1, 2 } } }; 
    return test; 
} 
Verwandte Themen