मेरी सिल्वरलाइट 4 आवेदन में पर लैम्ब्डा अभिव्यक्ति का उपयोग करना, मैं एक ObservableCollection एक वर्ग की वस्तुओं के होते हैं और एक अंतरफलक द्वारा परिभाषित किया गया है जो है: संग्रह करने के लिए एक नए तत्व जोड़ने से पहलेएक ObservableCollection
interface myInterface()
{
string Name { get; set; }
string Value { get; set; }
}
class myClass() : myInterface
{
...
}
ObservableCollection<myInterface> _collection;
, मैं यह सुनिश्चित करना चाहते हैं कि नाम-संपत्ति वर्तमान संग्रह तत्वों में पहले से मौजूद नहीं है। जैसा कि मैं शामिल नहीं कर सकता, मैं वर्तमान में सभी तत्वों के माध्यम से पुन: सक्रिय करता हूं और प्रत्येक तत्व को मैन्युअल रूप से जांचता हूं।
private bool CollectionContainsElement(string name2CheckAgainst)
{
foreach (myInterface item in _collection)
if (item.Name.Equals(name2CheckAgainst))
return true;
return false;
}
मैंने पढ़ा है कि यह भी एक लैम्ब्डा अभिव्यक्ति के माध्यम से प्राप्त किया जा सकता है, इसलिए मैं निम्नलिखित लिखा है:
if (!_collection.Contains(p => p.Name == name2CheckAgainst))
{
...
लेकिन अब मैं कह रही है कि "लैम्ब्डा अभिव्यक्ति नहीं हो सकता है कोई त्रुटि मिलती है, टाइप "myInterface" में परिवर्तित किया गया है, क्योंकि यह कोई प्रतिनिधि-प्रकार नहीं है "। (वॉर्डिंग भिन्न हो सकती है, क्योंकि मैंने इसे जर्मन संस्करण से अनुवादित किया है)
मुझे यकीन नहीं है कि इसे काम करने के लिए मुझे क्या बदलना है। using System.Linq;
शामिल है। और दूसरा प्रश्न (या शायद प्राथमिक प्रश्न): मैंने पढ़ा है, कि रनटाइम ओ (1) से होता है() - विधि से ओ (एन) - जो कि मेरे वर्तमान चेक से तेज़ नहीं है। तो क्या यह लैम्ब्डा का उपयोग करने के लिए इसे बदलने के लिए भी समझ में आता है? और आखिरकार, क्या मेरी कक्षा में मौजूदा नाम-संपत्ति की जांच करने में शायद एक और तरीका है?
अग्रिम धन्यवाद,
फ्रैंक
बहुत धन्यवाद है, लगता है जैसे मैं पढ़ने में भूलना उदाहरण lamda शामिल-विधि में withe। किसी का उपयोग स्पष्ट है :) – Aaginor