我的第一個建議是使用自定義比較器,但他沒有解決問題。因此,我調查了排序列表implementaion更詳細和替代我原來的職位有以下建議:
重寫Add方法,使用反射應該做的伎倆
private MySortedList()
{
}
public override void Add(object key, object value)
{
if (key == null || value == null)
{
//throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key"));
throw new ArgumentNullException(); // build your own exception, Environment.GetResourceString is not accessible here
}
var valuesArray = new object[Values.Count];
Values.CopyTo(valuesArray , 0);
int index = Array.BinarySearch(valuesArray, 0, valuesArray.Length, value, _comparer);
if (index >= 0)
{
//throw new ArgumentException(Environment.GetResourceString("Argument_AddingDuplicate__", new object[] { this.GetKey(index), key }));
throw new ArgumentNullException(); // build your own exception, Environment.GetResourceString is not accessible here
}
MethodInfo m = typeof(SortedList).GetMethod("Insert", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(this, new object[] {~index, key, value});
}
你有什麼的任何要求調用私有插入鑰匙必須是?如果不是,那麼爲什麼不只是將您的文本添加爲鍵和值? 'sortedList.Add(text,text)' – Douglas
是的,第一個參數必須是關鍵字,第二個參數必須是值。它取決於我們的項目中的其他類 –
可能重複的[C#按值排序列表](http://stackoverflow.com/questions/16649481/c-sharp-sorted-list-by-value-with-object) – nawfal