2011-03-21 10 views
6

पर वापस लौटें, इसलिए मैंने एक कक्षा बनाई है जिसमें तार, इंट्स और फ्लोट हैं।C# विशिष्ट int मान के लिए ऑब्जेक्ट्स की एक सरणी खोजें, फिर उस ऑब्जेक्ट के सभी डेटा

तो मैं उन प्रकार के मुख्य में एक सरणी की घोषणा की और इसे में उस प्रकार की वस्तुओं में पढ़ा

अब मैं एक विशिष्ट मूल्य के लिए कि सरणी खोज करने की आवश्यकता है, और अगर है कि मूल्य मैचों, तो पूरी वस्तु वापसी

मैं यह करने के बारे में कैसे जाऊं?

//Follwoing cod will initialize an array of Cd's 
cdClass[] cdArray = new cdClass[20]; 

float taxRate = 0; 
do 
{ 
    int i = 0; 
    cdClass current_cd = new cdClass(); 
    current_cd.read_cd(artist, genre, cdTitle, mSRP, stock, upc); 
    cdArray[i] = current_cd; 
    i++; 

} while (businesslogic.question() != 'Y'); 

buyer = inputfunctions.buyer(); 
int UPC = inputfunctions.get_upc(); 

for (int i = 0; i < 20; i++) 
{ 
    if (cdArray[i].get_upc() == UPC) 

उत्तर

15

आप ऑब्जेक्ट के लिए खोज करने के लिए एक सरल LINQ विस्तार विधि का उपयोग कर सकते हैं:

वास्तव में

public class cdClass 
{ 
    private static string artist = null; 
    private static string genre = null; 
    private static string cdTitle = null; 
    private static float mSRP; 
    private static int stock; 
    private static int upc = 0; 

    //Following functions are public member methods 
    public void read_cd(string artist, string genre, string cdTitle, float mSRP, int stock, int upc) 
    { 
     //cdClass cd = null ; 
     System.Console.WriteLine("Enter Artist Name: "); 
     artist = Console.ReadLine(); 

     System.Console.WriteLine("Enter CD Title: "); 
     cdTitle = Console.ReadLine(); 

     System.Console.WriteLine("Enter Genre Type: "); 
     genre = Console.ReadLine(); 

     System.Console.WriteLine("Enter Manufacturers Suggested Retal Price: "); 
     mSRP = float.Parse(Console.ReadLine()); 

     System.Console.WriteLine("Enter UPC Number: "); 
     upc = int.Parse(Console.ReadLine()); 

     System.Console.WriteLine("Enter Stock: "); 
     stock = int.Parse(Console.ReadLine()); 

     //return cd; 
    } 

    public int get_upc() 
    { 
     return upc; 
    } 

मुख्य स्टम्प्ड।

var foundItem = myArray.SingleOrDefault(item => item.intProperty == someValue); 

यहां आपको कुछ परिचित होने के लिए कुछ MSDN information regarding LINQ है।

पोस्ट कोड के लिए संपादित करें।

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

आप के रूप BrokenGlass ने सुझाव दिया साथ

cdClass foundCD = cdArray.SingleOrDefault(cd => cd.get_upc() == UPC); 

या Array.Find() पद्धति का उपयोग करके ब्लॉक

for (int i = 0; i < 20; i++) 
{ 
    if (cdArray[i].get_upc() == UPC) 

जगह ले सकता है ..

cdClass foundCD = Array.Find(cdArray, delegate(cdClass cd) { return cd.get_upc() == UPC); }); 
0

उपयोग LINQ की तरह:

public class Car 
{ 
    public int ID { get; set; } 
    public int CarName { get; set; } 
} 


class Program 
{ 
    public IEnumerable<Car> GetCars 
    { 
     get { return MyDb.Cars; } 
    } 

    static void Main(string[] args) 
    { 
     Car myCar = GetCars.FirstOrDefault(x => x.ID == 5); 
     Console.WriteLine("ID: {0} | CarName {1}", myCar.ID, myCar.CarName); 
    } 
} 

http://msdn.microsoft.com/en-us/library/bb397926.aspx आपको LINQ के साथ शुरू करने के लिए आवश्यक जानकारी प्रदान करेगा।

1
class TheThing { 
    public int T1; 
    public float T2; 
} 


List<TheThing> list = new List<TheThing>(); 

// Populate list... 

var instance = (from thing in list 
       where thing.T1 == 4 
       select thing).SingleOrDefault(); 

इसका मतलब यह है कि आप केवल एक मैच जहां T1 == 4, तो आप कुछ इस तरह करते हैं एक से अधिक है करने के लिए जा रहे हैं होगा:

var instances = from thing in list 
       where thing.T1 == 4 
       select thing; 
4

Array.Find() इस में LINQ लिए एक विकल्प है विशेष मामला है, खासकर यदि आप एक पुराने नेट संस्करण के लिए प्रतिबंधित कर रहे हैं:

var fooItem = Array.Find(myArray, item => item.fooProperty == "bar"); 
+0

बस FYI यदि आप .NET के किसी संस्करण के लिए प्रतिबंधित हैं जो LINQ का उपयोग नहीं कर सकता है तो यह अत्यधिक संभावना नहीं है कि आप 'Array.Find() '... ऑब्जेक्ट मिली = Array के पूर्वानुमान के लिए लैम्ब्डा अभिव्यक्ति वाक्यविन्यास का उपयोग करेंगे। खोजें (myArray, प्रतिनिधि (MyType o) {वापसी o.Foo == कुछ वैल्यू;}); ' –

+0

@ क्विंटिन पॉइंट लिया गया और बहुत सच – BrokenGlass

0

उन है कि अभी भी नेट 2 में "अटक जाने" कर रहे हैं के लिए ...

मेरी कक्षा सरणी संरचना ...

public class EmployerContactDetailsClass 
{ 
    public string wsStudentID { get; set;} 
    public string wsOrgID { get; set;} 
    public string wsContactID { get; set;} 
    public string wsContactName { get; set;} 
    public string wsContactEmail { get; set;} 
    public string wsEmployerEmail { get; set;} 
    public bool wsUserChoiceVerifier { get; set;} 
} 

मैं इस वर्ग wsStudentID == 'somevalue' का उपयोग कर एक पारित कर दिया सूचकांक मूल्य के आधार पर में एक विशिष्ट तत्व लगाना चाहते हैं।

पहले एक सूची सरणी

List<EmployerContactDetailsClass> OrgList = new List<EmployerContactDetailsClass>(); 

अगला एक एकल नोड तत्व

EmployerContactDetailsClass OrgElem = new EmployerContactDetailsClass(); 

कुछ डेटा स्रोत से अपनी सूची का निर्माण (मेरे मामले एक रीडर वस्तु)

     OrgElem.wsOrgID = reader["OrganisationID"].ToString(); //Org ID from database 
         OrgElem.wsContactID = reader["ContactID"].ToString(); //Contact ID from employer database 
         OrgElem.wsUserChoiceVerifier = (bool)reader["UserChoiceVerify"]; //boolean by default 
         if (reader["ContactGivenName"].ToString() != string.Empty && OrgElem.wsUserChoiceVerifier) 
          OrgElem.wsContactName = reader["ContactGivenName"].ToString() + " " + reader["ContactFamilyName"].ToString(); 
         else 
          OrgElem.wsContactName = "TO WHOM IT MAY CONCERN"; 
         OrgElem.wsContactEmail = reader["ContactEmail"].ToString(); //"[email protected]"; 
         OrgElem.wsEmployerEmail = reader["OrganisationEmail"].ToString(); //"[email protected]"; 

         //now add the elements into the array class 
         OrgList.Add(OrgElem); 

बनाते हैं सूची <> को एक ऐरे में कनवर्ट करें []

EmployerContactDetailsClass[] OrgListArray = (EmployerContactDetailsClass[])OrgList.ToArray(); 

Delegate का उपयोग कर सरणी में दिए गए छात्र आईडी को खोजें।

String wsStudentID = 'FIND007'; //with respect to Roger Moore RIP 
EmployerContactDetailsClass OrgElemFound = Array.Find(OrgListArray, ByStudentID(wsStudentID)); 

और विधेय अपने कोड पर कहीं और विधि ...

//predicate method to return true or f if studentID matches the array list (used to pass into SendEmail) 
private Predicate<EmployerContactDetailsClass> ByStudentID(string wsStudentID) 
{ 
    return delegate(EmployerContactDetailsClass OrgElem) 
    { 
     return OrgElem.wsStudentID == wsStudentID; 
    }; 
} 

चीयर्स!

संबंधित मुद्दे