2009-06-12 13 views
7

यह मेरी समझ है कि अगर मैं एक सूची में किसी आइटम की आईडी प्राप्त करना चाहते हैं, मैं यह कर सकता में एक अपरिभाषित तार का सूचकांक कैसे प्राप्त कर सकता: यदिमैं एक सूची <T>

private static void a() 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    Predicate<string> predicate = new Predicate<string>(getBoxId); 
    int boxId = list.FindIndex(predicate); 
} 

private static bool getBoxId(string item) 
{ 
    return (item == "box"); 
} 

लेकिन क्या मैं तुलना गतिशील बनाना चाहता हूँ? तो आइटम == "बॉक्स" की जांच करने के बजाय, मैं प्रतिनिधि को उपयोगकर्ता द्वारा दर्ज स्ट्रिंग में पास करना चाहता हूं, और यह जांचें कि आइटम == खोज स्ट्रिंग है या नहीं।

उत्तर

18

किसी अज्ञात विधि या लैम्ब्डा के माध्यम से एक कंपाइलर से उत्पन्न क्लोजर का उपयोग करना एक अनुमानित अभिव्यक्ति में कस्टम मान का उपयोग करने का एक अच्छा तरीका है।

private static void findMyString(string str) 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    int boxId = list.FindIndex(s => s == str); 
} 

आप .NET 2.0 (कोई लैम्ब्डा) का उपयोग कर रहे हैं, यह रूप में अच्छी तरह से काम करेगा:

private static void findMyString(string str) 
{ 
    List<string> list = new List<string> {"Box", "Gate", "Car"}; 
    int boxId = list.FindIndex(delegate (string s) { return s == str; }); 
} 
+0

सुंदर कर सकते हैं दोस्त, धन्यवाद! मेरे 3.0 अपग्रेड के लिए तत्पर हैं इसलिए मैं उन लैम्बडा का उपयोग कर सकता हूं। – ChristianLinnell

1
string toLookFor = passedInString; 
int boxId = list.FindIndex(new Predicate((s) => (s == toLookFor))); 
2

तुम बस

string item = "Car"; 
... 

int itemId = list.FindIndex(a=>a == item); 
0
List <string> list= new List<string>("Box", "Gate", "Car"); 
string SearchStr ="Box"; 

    int BoxId= 0; 
     foreach (string SearchString in list) 
     { 
      if (str == SearchString) 
      { 
       BoxId= list.IndexOf(str); 
       break; 
      } 
     }