c# - Overloading a params function with an IEnumerable -


मान लीजिए मेरे पास दो फ़ंक्शन हैं:

  फ़ू (params INotifyPropertyChanged [] आइटम) {/ / डू सामान} फ़ू & lt; T & gt; (IEnumerable & lt; T & gt; आइटम) जहां T: INotifyPropertyChanged {Foo (items.ToArray ()); }  

दूसरा वाला मुझे foo कॉल करने के लिए एक सामान्य वर्ग से बाध्यता जहां T: INotifyPropertyChanged कॉल करता है, लेकिन दूसरा हल करता है स्वयं के लिए तो मुझे स्टैक अतिप्रवाह अपवाद मिलता है।

  1. क्या यह स्पष्ट करना संभव है कि जब कुछ अस्पष्टता हो, तो मुझे कौन सा अधिभार चाहिए?
  2. क्या कॉल करने का एक और तरीका है जेनेरिक प्रकार की बाधाओं को मानते हुए पैरामेज टाइप के लिए एक व्यवहार्य विकल्प बनाते हैं?

    अग्रिम धन्यवाद !

    आपको एक INotifyPropertyChanged [] पास नहीं करना होगा, नहीं टी []
    उदाहरण के लिए:

      फ़ू & lt; T & gt; (IEnumerable & lt; T & gt; आइटम) जहां T: INotifyPropertyChanged {Foo (items.Cast & lt; INotifyPropertyChanged & gt; ) .ToArray ()); }  

    सामान्य तौर पर, हालांकि, IEnumerable संस्करण को params संस्करण से कॉल करना बेहतर है, जैसे:

    <पूर्व> फ़ू (पैराम्स इनोटेफप्रोटीटी चेंजेड [] आइटम) {फू ((आईएनइमेरेबल & लेफ्टिनेंट; इनोटिफिप्रोपर्टी चेंगलटेड & gt;) आइटम); } Foo & lt; T & gt; (IEnumerable & lt; T & gt; आइटम) जहां T: INotifyPropertyChanged {// do stuff}

Comments