मैं एक सामान्य विधि में बाधा जोड़ने की कोशिश कर रहा हूं, इसलिए यह वैल्यू टाइप, स्ट्रिंग्स या न्यूबल योग्य मान प्रकारों की जांच करता है।वैल्यू टाइप, स्ट्रिंग्स और वैल्यू टाइप्स के नलबल के लिए जेनेरिक बाधा
समस्या यह है कि यह है:
- मूल्य प्रकार struts
- व्यर्थ कर रहे हैं
- तार अपरिवर्तनीय संदर्भ प्रकार मूल्य प्रकार के होते हैं लेकिन एक "जहां एस: struct" में स्वीकार नहीं किया जाएगा प्रकार बाधा ।
तो क्या कोई जानता है कि कोई तरीका है कि मैं इन्हें स्वीकार कर सकता हूं और केवल इन प्रकारों को सामान्य बाधा में स्वीकार कर सकता हूं?
समस्या यह है कि मैं Expression<Func<T, S>
पैरामीटर स्वीकार करने की कोशिश कर रहा हूं जो किसी दिए गए ऑब्जेक्ट के लिए इन प्रकार की संपत्ति का प्रतिनिधित्व करेगा।
कार्यक्षमता की तरह कुछ होगा निम्नलिखित (कोड ध्यान दें किसी भी मतलब नहीं है और बस कुछ मैं के लिए क्या देख रहा हूँ की एक विचार प्राप्त करने के लिए जल्दी है):
public class Person
{
public string Name {get; set;}
public DateTime? DOB {get; set;}
public int NumberOfChildren {get; set;}
public Car CurrentCar {get; set;}
}
---
internal void MyGenericMethod<T, S>(T myObject, Expression<Func<T, S> property){...}
Person myPerson = new Person();
MyGenericMethod(myPerson, p => p.Name); //S would be a string
MyGenericMethod(myPerson, p => p.DOB); //S would be a DateTime?
MyGenericMethod(myPerson, p => p.NumberOfChildren); //S would be a struct
तीन कॉल उपरोक्त सभी को स्वीकार कर लिया जाना चाहिए, लेकिन निम्नलिखित नहीं: धन्यवाद एंटोन और मार्क:
MyGenericMethod(myPerson, p => p.CurrentCar); //S would be a class and shouldn't compile
अग्रिम
अद्यतन धन्यवाद। MyGenericMethod में अतिरिक्त पैरामीटर स्वीकार करने वाले 4 अलग-अलग हस्ताक्षर हैं, इसलिए मुझे मौजूदा 4 में से प्रत्येक के लिए 3 अलग-अलग (संरचना, शून्य, स्ट्रिंग) बनाने का विचार पसंद नहीं है ... यह बनाए रखने के लिए एक दुःस्वप्न होगा!
इसके बजाय 'संरचना धारक' को परिभाषित करने के लिए समझ में आ सकता है। फिर यह संकलन-समय "सिंटेक्टिक चीनी" बन जाता है, जिसका उद्देश्य यह निर्दिष्ट करना है कि क्या है और कानूनी नहीं है। लेकिन रनटाइम परिणाम कुशल होगा - कक्षा के लिए आवश्यक आवंटन/कचरा-संग्रह को समाप्त करता है। – ToolmakerSteve