所以我有一個CreditCard類,它具有一些屬性,其中一個用於卡號作爲字符串(public string Number { get; set; }
)。我將CreditCard對象存儲在具有變量列表(private List<CreditCard> cclist = new List<CreditCard>();
)的CreditCardList類中。我希望能夠通過首先對List進行排序,然後使用列表中的BinarySearch方法來檢索CreditCard的卡號。我也想通過傳遞一個數字的字符串索引器來搜索BinarySearch方法,以及一個比較器(如果我需要的話)。List <T>使用字符串索引器的BinarySearch
這是我到目前爲止的方法來獲得CreditCard匹配的數字,但Visual Studio 2013給我一個錯誤的行:int index = cclist.BinarySearch(cclist[input], new CreditCardComparer());
「最好的重載方法匹配'System.Collections.Generic.List .this [int]'有一些無效的參數。「我認爲這是因爲我使用String索引器錯誤或什麼。
public List<CreditCard> GetCardByNumber (string input)
{
List<CreditCard> tempList = new List<CreditCard>();
// save the current unsorted list to a temporary list to revert back to after sorting
List<CreditCard> originalList = new List<CreditCard>(cclist.Capacity);
for (int i = 0; i < cclist.Capacity; i++)
{
originalList[i] = cclist[i];
}
// begin sorting for binary search of card number
cclist.Sort();
int index = cclist.BinarySearch(cclist[input], new CreditCardComparer());
if (index < 0)
{
tempList.Add(cclist[input]);
}
// revert back to the original unsorted list
for (int i = 0; i < originalList.Capacity; i++)
{
cclist[i] = originalList[i];
}
// return the found credit card matching the specified number
return tempList;
}// end GetCardByNumber (string input)
這裏是我的int和字符串索引:
public CreditCard this[int i]
{
get
{
if (i < 0 || i >= cclist.Count)
{
throw new ArgumentOutOfRangeException("index " + i + " does not exist");
}
return cclist[i];
}
set
{
if (i < 0 || i >= cclist.Count)
{
throw new ArgumentOutOfRangeException("index " + i + " does not exist");
}
cclist[i] = value;
saveNeeded = true;
}
}// end CreditCard this[int i]
public CreditCard this[string input]
{
get
{
foreach (CreditCard cc in cclist)
{
if (cc.Number == input)
{
return cc;
}
}
return null;
}
}// end CreditCard this[string number]
這裏是我的比較器類:
public class CreditCardComparer : IComparer<CreditCard>
{
public override int Compare(CreditCard x, CreditCard y)
{
return x.Number.CompareTo(y.Number);
}
}// end CreditCardComparer : IComparer<CreditCard>
最後,這裏是我的名單排序,什麼不是必需品...
class CreditCard : IEquatable<CreditCard>, IComparable<CreditCard>
{
public bool Equals (CreditCard other)
{
if (this.Number == other.Number)
{
return true;
}
else
{
return false;
}
}// end Equals(CreditCard other)
public int CompareTo(CreditCard other)
{
return Number.CompareTo(other.Number);
}// end CompareTo(CreditCard other)
}
是否真的有可能做我正在嘗試,即發送一個字符串索引器,返回基於字符串的CreditCard對象到List的BinarySearch方法?
此外,如有必要,我可以提供更多的代碼,但是我覺得這有點多。
你可以解決你所有的問題**不存儲* *信用卡信息開始,我不知道這是否合法允許。 – user2711965 2014-09-30 17:58:00
這只是一個學校的示例練習。這裏沒有真正的信息。 :) – user48743 2014-09-30 18:03:00
這似乎瘋狂過度設計。必須是學校項目。 – 2014-09-30 18:04:47