2010-04-16 12 views
9

एक कस्टम विधेय के साथ List.Find उपयोग करने में समस्या का एक सा होने विधेय कोवीबी.Net सूची। ढूँढें। मान पास

मैं एक समारोह है कि इस

private function test() 
    Dim test As Integer = keys.Find(AddressOf FindByOldKeyAndName).NewKey 

यहाँ करता विधेय

Private Shared Function FindByOldKeyAndName(ByVal k As KeyObj) As Boolean 
     If k.OldKey = currentKey.OldKey And k.KeyName = currentKey.KeyName Then 
      Return True 
     Else 
      Return False 
     End If 


    End Function 
के लिए समारोह है है

इसे इस तरह से करने का मतलब है कि मुझे कक्षा में एक साझा "currentKey" ऑब्जेक्ट होना है, और मुझे पता है कि मौजूदा मूल्यों (अर्थात्, keyname, और oldkey) में रुचि रखने वाले मानों को पारित करने का एक तरीका होना चाहिए।

आदर्श मैं तथापि keys.Find(AddressOf FindByOldKeyAndName(Name,OldVal))

की तरह कुछ के द्वारा इसे कॉल करना चाहते जब मैं यह कर मैं संकलक त्रुटियों मिल चाहते हैं।

मैं इस विधि को कैसे कॉल करूं और मूल्यों में कैसे पास करूं?

उत्तर

22

आप इसे लैम्बडा अभिव्यक्ति के साथ साफ़ रूप से हल कर सकते हैं, जो VS2008 और ऊपर उपलब्ध है। एक मूर्ख उदाहरण:

Sub Main() 
    Dim lst As New List(Of Integer) 
    lst.Add(1) 
    lst.Add(2) 
    Dim toFind = 2 
    Dim found = lst.Find(Function(value As Integer) value = toFind) 
    Console.WriteLine(found) 
    Console.ReadLine() 
End Sub 

पिछले संस्करणों के लिए आपको अपनी कक्षा का एक निजी क्षेत्र "currentKey" बनाना होगा। एक क्लीनर समाधान के लिए this thread में अपना कोड देखें।

2

मुझे वीबी.Net के नए संस्करणों में इसे आजमाने की आवश्यकता नहीं है, जो कि एक अच्छा तरीका हो सकता है, लेकिन पुराने संस्करणों में एकमात्र तरीका है जिसे मैं जानता हूं कि आपके वर्ग में एक साझा सदस्य होगा कॉल से पहले मूल्य।
छोटे उपयोगिता वर्ग बनाने वाले लोगों के जाल पर विभिन्न नमूने हैं जो इसे थोड़ा सा बनाने के लिए लपेटते हैं।

4

मेरे पास एक ऑब्जेक्ट है जो अद्वितीय संपत्ति प्रकारों की एक सूची प्रबंधित करता है। उदाहरण:

obj.AddProperty(new PropertyClass(PropertyTypeEnum.Location,value)) 
obj.AddProperty(new PropertyClass(PropertyTypeEnum.CallingCard,value)) 
obj.AddProperty(new PropertyClass(PropertyTypeEnum.CallingCard,value)) 
//throws exception because property of type CallingCard already exists 

यहां यह जांच करने के लिए कुछ कोड है गुण पहले से ही मौजूद है, तो

Public Sub AddProperty(ByVal prop As PropertyClass) 
    If Properties.Count < 50 Then 
     'Lets verify this property does not exist 
     Dim existingProperty As PropertyClass = _ 
      Properties.Find(Function(value As PropertyClass) 
       Return value.PropertyType = prop.PropertyType 
      End Function) 

     'if it does not exist, add it otherwise throw exception 
     If existingProperty Is Nothing Then 
      Properties.Add(prop) 
     Else 
      Throw New DuplicatePropertyException("Duplicate Property: " + _ 
         prop.PropertyType.ToString()) 
     End If 

    End If 
End Sub 
संबंधित मुद्दे