निम्नलिखित कोड (VS2010 का प्रयोग करके) को संकलित करने में विफल रहता है लागू कर रहा है और मैं क्यों नहीं दिख रहा है विफल रहता है। संकलक अनुमान लगाने के लिए कि List<TestClass>
'संगत' IEnumerable<ITest>
साथ (एक बेहतर शब्द की कमी के लिए खेद है) में सक्षम होना चाहिए, लेकिन किसी भी तरह यह नहीं है। मुझे यहां क्या समझ नहीं आ रहा है?सी # संकलक पहचान करने के लिए एक वर्ग एक अंतरफलक
interface ITest {
void Test();
}
class TestClass : ITest {
public void Test() {
}
}
class Program {
static void Test(IEnumerable<ITest> tests) {
foreach(var t in tests) {
Console.WriteLine(t);
}
}
static void Main(string[] args) {
var lst = new List<TestClass>();
Test(lst); // fails, why?
Test(lst.Select(t=>t as ITest)); //success
Test(lst.ToArray()); // success
}
}
संकलक दो त्रुटियों देता है:
'ConsoleApplication1.Program.Test (System.Collections.Generic.IEnumerable < ConsoleApplication2 लिए अच्छी अतिभारित विधि मैच .ITest >) 'में कुछ ऐसी अमान्य तर्क हैं
तर्क 1: 'System.Collections.Generic.List <ConsoleApplication2.TestClass>' से परिवर्तित नहीं कर सकते 'System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>'