2011-04-24 51 views
0

我有一個Equal()方法來查看OrderNumber是否已經放入或未放入。我不知道如何在for循環數組中調用它。C#如何在for循環數組中實現Equal()方法?

這是我平等法

public override bool Equals(object e) 
    { 
     bool equal; 
     Order temp = (Order)e; 
     if(OrderNumber == temp.OrderNumber) 
      equal = true; 
     else 
      equal = false; 
     return equal; 
    } 

這是主要的()

public class week_6 
{ 
public static void Main(string[] args) 
{ 
    ShippedOrder[] InputOrder = new ShippedOrder[5]; 
    int x; 
    for(x= 0; x < InputOrder.Length; ++x) 
    { 
    InputOrder[x] = new ShippedOrder(); 


    Console.Write("Enter order number: "); 
    InputOrder[x].OrderNumber = Convert.ToInt32(Console.ReadLine()); 
    Console.Write("Enter customer name: "); 
    InputOrder[x].CustName = Console.ReadLine(); 
    Console.Write("Enter quantity: "); 
    InputOrder[x].Quantity = Convert.ToInt32(Console.ReadLine()); 
    } 

的SippedOrder類的輸入部分是一個子類Order類的。該程序編譯並運行正常,而不嘗試用equals方法做任何事情。

我想有,如果他們把它說了同樣的訂單號碼是其中「對不起,訂單號‘###’是重複的。 請重新輸入」

任何幫助將是非常讚賞

+0

請問您能否更清楚地回答您的問題?你問哪一部分?如何使用'Equals()'方法覆蓋並使用它來確定是否向用戶顯示控制檯消息?或者當你檢測到使用你的'Equals()'覆蓋輸入了相同的命令時,你是否問如何打破循環? – dawebber 2011-04-24 16:17:10

+0

我只是想比較輸入的訂單號和以前的訂單號。如果他們是相同的消息彈出。我不知道如何做到這一點,認爲平等方法是最好的方法。 – Joel 2011-04-24 16:22:30

+0

如果您重寫'Equals',請確保您重寫'GetHashCode'。如果您選擇使用'HashSet'來跟蹤以前的訂單,這將尤其重要。請參閱http://msdn.microsoft.com/en-us/library/336aedhh.aspx – 2011-04-24 17:48:03

回答

3

您可以嘗試使用HashSet<ShippedOrder>而不是數組。並使用它的Add()方法。如果Add()返回false,則可以顯示您的留言「對不起,訂單號‘###’是重複的,請重新輸入。」

編輯:

HashSet<ShippedOrder> InputOrder = new HashSet<ShippedOrder>(); 

,您可以添加項目喜歡這個。

ShippedOrder order = new ShippedOrder(); 
order.OrderNumber = 1; 
order.CustName = "Foo"; 
order.Quantity = 10; 

bool result = InputOrder.Add(order); 

if (!result) 
{ 
    // add failed; display message 
    ... 
} 
+0

謝謝,我很新的C#和平等/ gethash方法。我如何將HashSet 實現到我的代碼中? – Joel 2011-04-24 16:30:35

+0

@Joel查看我的編輯。此外,MSDN頁面中還有一個示例,您可以一直搜索HashSet的更多示例。 – 2011-04-24 16:38:28

1

此linq查詢可能工作。

var isDupe = InputOrder.Where(o => o.Equals(InputOrder[x])).Count() > 1; 
+1

如果你只需要一個匹配,.Any()比使用Count()更好,因爲任何會停止在第一場比賽,也更清晰:) – 2011-04-24 16:22:58

+0

是的,但我正在尋找兩個或更多的比賽。 – 2011-04-24 16:25:42

+0

感謝您的幫助,我將如何將此添加到forloop? – Joel 2011-04-24 16:26:34