निम्न विधि हस्ताक्षर को देखते हुए, यह क्यों होता है जब पैरामीटर स्पष्ट रूप से संकलक नामित होता है, तो स्वचालित रूप से प्रकार का अनुमान लगाने में असमर्थ होता है? विजुअल स्टूडियो 2010 एसपी 1 इस प्रकार का अनुमान लगाने में सक्षम है और कोई चेतावनी या त्रुटियां नहीं दिखाता है।वैकल्पिक पैरामीटर के साथ जेनेरिक प्रकार का अनुमान लगाने में असमर्थ
IEnumerable<T> ExecuteCommand<T>(
string commandText,
string connectionName = null,
Func<IDataRecord, T> converter = null) { ... }
static SomeClass Create(IDataRecord record) { return new SomeClass(); }
void CannotInferType() {
var a = ExecuteCommand(
"SELECT blah",
"connection",
converter: Test.Create);
}
void CanInferType() {
var a = ExecuteCommand(
"SELECT blah",
"connection",
Test.Create);
}
यह कॉलिंग CannotInferType
में वर्णित है और जब यह संकलन करने का प्रयास कर संकलक CanInferType
काम करता है में वर्णित के रूप की उम्मीद के रूप में यह बुला जबकि error CS0411: The type arguments for method 'Test.ExecuteCommand<T>(string, string, System.Func<System.Data.IDataRecord,T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
का उत्सर्जन करता है के रूप में।
ऊपर बताए अनुसार, विजुअल स्टूडियो स्वयं कोई समस्या नहीं रिपोर्ट करता है, और परिवर्तनीय a
के लिए इंटेलिजेंस IEnumerable<SomeClass>
दिखाता है लेकिन कुछ कारणों से यह संकलित नहीं होता है।
यदि आपको एक छोटा लेकिन पूरा * उदाहरण दिया गया तो इससे मदद मिलेगी ... –