2012-06-12 39 views
0

我需要的建议是位于代码底部附近的“Equals”方法。需要注意的是,Equals方法必须包含在Order类中,并且我不能使用自动实现的属性,以免奇怪为什么我不使用它们。 equals方法的功能是搜索当前的所有订单号(当前有1个用户和3个自动化)以供复制。我无法弄清楚如何在没有用户输入或不使用大量“if”语句的情况下做到这一点。任何建议都会很棒,谢谢。 ~~底部的其他两种方法没有完成的~~方法:搜索类实例

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Assignment3 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! 
     // USER CONTROLLED 
     int ordNum; 
     Console.Write("Enter Order Number: "); 
     ordNum = Convert.ToInt16(Console.ReadLine()); 

     string custName; 
     Console.Write("Enter Customer Name: "); 
     custName = Console.ReadLine(); 

     int quantity; 
     Console.Write("Enter Quantity: "); 
     quantity = Convert.ToInt32(Console.ReadLine()); 

     Order firstOrder = new Order(ordNum, custName, quantity); 

     Console.WriteLine("Customer: {0}\nOrder Number: {1}\nQuantity" + 
     "Ordered: {2}\nTotal Price: {3}", firstOrder.Customer, firstOrder.OrderNum, firstOrder.QuantityOrd, firstOrder.Total); 
     // USER CONTROLLED 

     // AUTOMATED 
     // FIRST 
     int firstOrdNum = 678123; 
     string firstName ="P Jenkins"; 
     int firstQuantity = 35; 
     Order firstAutomated = new Order(firstOrdNum, firstName, firstQuantity); // first Instance of Order 
     // END OF FIRST 

     // SECOND 
     int secondOrdNum = 678123; 
     string secondName = "L Jenkins"; 
     int secondQuantity = 35; 
     Order secondAutomated = new Order(secondOrdNum, secondName, secondQuantity); 
     // END OF SECOND 

     // THIRD 
     int thirdOrdNum = 49284; 
     string thirdName = "McDonalds"; 
     int thirdQuantity = 78; 
     Order thirdAutomated = new Order(thirdOrdNum, thirdName, thirdQuantity); 
     // END OF THIRD 
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 



    } 
} 
class Order 
{ 
    private int orderNum; 
    private string customer; 
    private int quantityOrd; 
    public const double amt = 19.95; 
    private double totalPrice; 
    // PROPERTIES TO ACCES PRIVATE DATA 
    public int OrderNum // CHECK 
    { 
     get 
     { 
      return orderNum; 
     } 
     set 
     { 
      orderNum = value; 
     } 
    } 
    public string Customer // CHECK 
    { 
     get 
     { 
      return customer; 
     } 
     set 
     { 
      customer = value; 
     } 
    } 
    public int QuantityOrd // CHECK 
    { 
     get 
     { 
      return quantityOrd; 
     } 
     set 
     { 
      quantityOrd = value; 
      CalcTotalPrice(); 
     } 
    } 
    public double Total // CHECK 
    { 
     get 
     { 
      return totalPrice; 
     } 
    }  
    // CALCULATE TOTAL 
    private void CalcTotalPrice() 
    { 
     totalPrice = QuantityOrd * amt; 
    } 
    // EQUALS METHOD 
    public void Equals(int ordNum1, int ordNum2) 
    { 
     Console.WriteLine("The two orders by P Jenkens (Order Number: {0}) and L Jenkens (Order Number: {1})" + 
      "are the same order!", ordNum1, ordNum2); 
    } 
    public void GetHashCode(string customer, double hashCode) 
    { 
     Console.WriteLine("The Hash Code of Customer {0} is {1}", customer, hashCode); 
    } 
    public void ToString() 
    { 
    } 


    // CONSTRUCTOR TO ACCEPT VALUES 
    public Order(int ordNum, string cust, int qntOrd) 
    { 
     OrderNum = ordNum; 
     Customer = cust; 
     QuantityOrd = qntOrd; 
    } 

} 
+0

除了我的答案,你应该阅读有关[AutoProperties](http://msdn.microsoft.com/ EN-US /库/ bb384054.aspx)。 – SimpleVar

回答

0

听起来像每个Order应该有一个唯一的标识符。 检查两个订单是否是相同的订单,将比较他们的ID。 检查两个订单是否具有相同的内部状态,就像一个正常的等于。

如果您想使用他们的ID访问订单,您应该将它们保存在字典中。

一般的想法是这样的,虽然很多是缺少这里:

public class Order 
{ 
    ... 

    private static Dictionary<int, Order> _orders = new Dictionary<int, Order>(); 

    public static Order Get(int id) 
    { 
     return this._order[id]; 
    } 

    private static object _idLocker = new object(); 
    private static int _nextId = 0; 
    public readonly int Id; 

    public Order() 
    { 
     // Just to make sure that the identifiers are unique, 
     // even if you have threads messing around. 
     lock (_idLocker) 
     { 
      this.Id = _nextId; 
      _nextId++; 
     } 

     _orders.Add(this.Id, this); 
    } 

    public Order(int id) 
    { 
     this.Id = id; 
     _orders.Add(this.Id, this); 
    } 

    public static bool Equals(int id1, int id2) 
    { 
     return _orders[id1].Equals(_orders[id2]); 
    } 

    public bool Equals(Order otherOrder) 
    { 
     // Check whether you have the same inner state as the other order 
    } 
} 
+0

感谢您的代码片段。我更多地看它,它似乎是一个可以我需要它=) – JRoy