2009-10-14 12 views
41

सभी उदाहरण मैं बुनियादी स्ट्रिंग प्रकार के होते हैं List<T> में IndexOf() विधि का उपयोग कर के देख की विधि का उपयोग कैसे करें। मैं क्या जानना चाहता हूं कि किसी ऑब्जेक्ट वेरिएबल्स के आधार पर किसी ऑब्जेक्ट की सूची प्रकार की अनुक्रमणिका को कैसे वापस करना है।indexOf() सूची <object>

List<Employee> employeeList = new List<Employee>(); 
employeeList.Add(new Employee("First","Last",45.00)); 

मैं सूचकांक लगाना चाहते हैं जहां employeeList.LastName == "Something"

+0

की तरह पसंद करते हैं वहाँ लैम्ब्डा भाव के बिना यह करने के लिए कोई तरीका है? मैं .NET 2.0 – omencat

+0

का उपयोग कर फंस गया हूं क्या आप नीचे अपना समाधान उपयोग कर सकते हैं? –

उत्तर

62
int index = employeeList.FindIndex(employee => employee.LastName.Equals(somename, StringComparison.Ordinal)); 

संपादित करें: के लिए सी # 2.0 lambdas (मूल LINQ या किसी नेट 3+ सुविधाओं, में सिर्फ लैम्ब्डा सिंटैक्स का उपयोग नहीं करता है बिना # सी 3.0):

int index = employeeList.FindIndex(
    delegate(Employee employee) 
    { 
     return employee.LastName.Equals(somename, StringComparison.Ordinal); 
    }); 
+0

मैं पुष्टि करता हूं कि यह काम करता है। हालांकि परियोजना लिंक का उपयोग नहीं करती है। हम .NET 2.0 – omencat

+1

@Bay का उपयोग कर रहे हैं: आप अज्ञात प्रतिनिधियों के लिए पुराने (प्री-सी # 3) वाक्यविन्यास का उपयोग कर सकते हैं, लेकिन मैंने जो मूल लिखा है, वह .NET 2 में तब तक काम करेगा जब तक आप C# 3 के साथ संकलित नहीं हो रहे हैं कंपाइलर (सी # 3.0 और .NET 3.0 एक-दूसरे पर निर्भर नहीं हैं)। –

20
public int FindIndex(Predicate<T> match); 

का उपयोग lambdas:

employeeList.FindIndex(r => r.LastName.Equals("Something")); 

नोट:

// Returns: 
//  The zero-based index of the first occurrence of an element 
//  that matches the conditions defined by match, if found; 
//  otherwise, –1. 
8

आप ओवरराइड के माध्यम से ऐसा कर सकते हैं, इसके बराबर विधि

class Employee 
    { 
     string _name; 
     string _last; 
     double _val; 
     public Employee(string name, string last, double val) 
     { 
      _name = name; 
      _last = last; 
      _val = val; 
     } 
     public override bool Equals(object obj) 
     { 
      Employee e = obj as Employee; 
      return e._name == _name; 
     } 
    } 
+2

बदसूरत समाधान ... – Kamarey

+1

यह वह है जिसे हम fisrt dotnet संस्करण –

+5

में करते थे, यह वास्तव में एकमात्र उत्तर है जो मूल प्रश्न का उत्तर देता है - किसी भी ऑब्जेक्ट के साथ 'इंडेक्सऑफ()' का उपयोग कैसे करें। हर किसी ने अभी 'FindIndex() 'का उपयोग करके सुझाव दिया है ... जो ठीक है, लेकिन इस जवाब को मुझे लगता है कि अधिक क्रेडिट प्राप्त करना चाहिए। – codeulike

4

क्षमा करें, एक अच्छा उपाय :)

int index = employees.FindIndex(
     delegate(Employee employee) 
     { 
      return employee.LastName == "Something"; 
     }); 

संपादित करें के लिए और अधिक: - पूर्ण उदाहरण .NET 2.0 प्रोजेक्ट में।

class Program 
{ 
    class Employee { public string LastName { get; set; } } 
    static void Main(string[] args) 
    { 
     List<Employee> employeeList = new List<Employee>(); 
     employeeList.Add(new Employee(){LastName="Something"}); 
     employeeList.Add(new Employee(){LastName="Something Else"}); 
     int index = employeeList.FindIndex(delegate(Employee employee) 
          { return employee.LastName.Equals("Something"); }); 
     Console.WriteLine("Index:{0}", index); 
     Console.ReadKey(); 
    } 
} 
+0

हां, यह मेरे वास्तविक अनुरोध को पूरा करता है। मैं अन्य उपयोगकर्ताओं के लिए लैम्ब्डा संस्करण पर चेक मार्क छोड़ रहा हूं क्योंकि वे 3.5 का उपयोग कर रहे हैं। धन्यवाद। – omencat

+0

कूल, खुशी है यह काम करता है। –

+0

आपका उदाहरण प्रारंभकर्ता सिंटैक्स का उपयोग करता है जो केवल सी # 3 में है। ओपी स्पष्ट रूप से विशिष्ट नहीं है कि वह सी # 3 या सी # 2 का उपयोग कर रहा है, इसलिए यह बताना मुश्किल है कि वह क्या चाहता है। –

0

मैं इस

private List<Person> persons = List<Person>(); 

      public PersonService() 
      { 
       persons = new List<Person>() { 
        new Person { Id = 1, DOB = DateTime.Today, FirstName = "Pawan", LastName = "Shakya" }, 
        new Person { Id = 2, DOB = DateTime.Today, FirstName = "Bibek", LastName = "Pandey" }, 
        new Person { Id = 3, DOB = DateTime.Today, FirstName = "Shrestha", LastName = "Prami" }, 
        new Person { Id = 4, DOB = DateTime.Today, FirstName = "Monika", LastName = "Pandey" }, 
       }; 
      } 

public PersonRepository.Interface.Person GetPerson(string lastName) 
     { 
      return persons[persons.FindIndex(p=>p.LastName.Equals(lastName, StringComparison.OrdinalIgnoreCase))]; 
     } 
संबंधित मुद्दे