我試圖從頭開始創建一個查找方法,以查看兩個對象是否相等,因爲某些成員是相等的,使用Equals方法來做到這一點。我知道使用Find/Contains方法會更快,但我無法使用它們。方法的簽名是「static int Find(List c,Coffee x)」如果x在c中存在,Find查找x在c中並返回一個有效索引(例如0,1),否則返回-1。必須使用equals方法來確定等同性。如果傳遞的對象不等於列表中的當前對象,它將被添加到列表中(該列表包含從基類派生的兩種類型的對象,因此列表可以存儲這兩種類型)。等值換算由名稱,成本,需求,持有成本和焙烤類型定義,用於定期和名稱,成本,需求,持有成本和最小數量的無水咖啡。這是我到目前爲止有:創建查找方法
static void Main(string[] args)
{
// Create objects and references
Coffee obv = new Coffee();
Decaf decafCoffee = null;
Regular regularCoffee = null;
List<Coffee> inventory = new List<Coffee>();
// Prompt user for input and store it as a string
Console.Write("Enter q to quit or the whole data as a comma delimited string using the following format Name,D,C,D:minQ or R:roast ");
string s = Console.ReadLine();
// Loop
while (!s.ToLower().Equals("q"))
{
// Split string up and assign componets to variables
string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
string name = values[0];
string demand = (values[1]);
string cost = (values[2]);
string type = values[3];
// Check for > 0 and convert to numbers
float D = CheckDemand(demand);
float C = CheckCost(cost);
float M = 0;
if (type.StartsWith("D:"))
{
type = Regex.Match(type, @"\d+").Value;
M = CheckMin(type);
decafCoffee = new Decaf(name, D, C, M);
inventory.Add(decafCoffee);
}
else if (type.StartsWith("R:"))
{
if (type.Contains("light"))
{
M = 1;
regularCoffee = new Regular(name, D, C, M);
inventory.Add(regularCoffee);
}
else if (type.Contains("medium"))
{
M = 2;
regularCoffee = new Regular(name, D, C, M);
inventory.Add(regularCoffee);
}
else if (type.Contains("dark"))
{
M = 3;
regularCoffee = new Regular(name, D, C, M);
inventory.Add(regularCoffee);
}
else Console.WriteLine("\nError, please enter all lower case \"dark\", \"medium\", or \"light\" next time.");
}
else Console.WriteLine("\nError, please enter either \"D:\" followed by a number or \"R:\" followed by roast type next time.");
Console.Write("\nEnter q to quit or the whole data as a comma delimited string using the following format Name,D,C,D:minQ or R:roast: ");
s = Console.ReadLine();
} // End loop
// Sort and display values
var sortedList = inventory.OrderBy(i => i.Q()).ToList();
Console.WriteLine("\nName \t C ($) Demand \t Detail Q(lbs.) TAC
for (int j = 0; j < inventory.Count; j++)
{
Console.WriteLine("{0}", sortedList[j].toString());
}
Console.WriteLine(obv.toStringQ());
這就是我對equals方法:
public override bool Equals(object obj)
{
if (obj is Coffee)
{
bool isNameEqual = Name.Equals(this.Name);
bool isuCostEqual = Cost.Equals(this.Cost);
bool isDemandEqual = Demand.Equals(this.Demand);
bool ishCostEqual = h.Equals(this.h);
bool isMinEqual = getQ.Equals(this.getQ);
return (isNameEqual && isuCostEqual && isDemandEqual && ishCostEqual && isMinEqual);
}
return false;
}
如何去使用find方法?
您需要在Coffee類中實現等於比較器。 – 2013-04-26 20:19:57