2011-03-21 135 views
6

所以我創建了一個包含字符串,整數和浮點數的類。c#爲特定的int值搜索對象數組,然後返回該對象的所有數據

然後我在主那些類型的聲明的陣列和在該類型的對象讀入它

現在我需要搜索該陣列爲一特定值,並且如果該值匹配,則返回整個對象

我該怎麼做呢?

真的難倒

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; 
    } 

MAIN:

//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擴展方法來搜索對象。

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

這是一些MSDN information regarding LINQ讓你更熟悉。

編輯爲代碼發佈。

我首先想說的是,它看起來像是從一種不同的語言中引入了一些範例,如使用getter方法而不是使用.NET樣式屬性的java,這可能是您想要研究的。但是我已經做了代碼示例您的具體情況更有針對性..

,可隨時更換塊

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

隨着

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

或者使用Array.Find()方法,通過BrokenGlass的建議..

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替代特殊情況下,特別是如果你被限制在一個較舊的.NET版本:

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

只是FYI,如果你被限制在一個不能使用LINQ的.NET版本中,那麼你很可能不會使用lambda表達式語法來判斷'Array.Find()'...'Object found = Array的謂詞。 Find(myArray,delegate(MyType o){return o.Foo == someValue;});' – 2011-03-21 22:47:58

+0

@Quintin點和非常真實 – BrokenGlass 2011-03-21 23:52:02

0

對於那些還在「卡」在.net 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在陣列中查找給定的StudentID。

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; 
    }; 
} 

乾杯!