へのIList
IList<T>
ためにSortメソッドを実装しようとしている:私は知られているタイプの要素のリストのための方法を呼んでいる
public static void Sort<T>(this IList<T> list, Comparison<T> comparison)
{
ArrayList.Adapter((IList)list).Sort(Comparer<T>.Create(comparison));
}
ArrayList.Adapter((IList)list).Sort(Comparer<T>.Create(comparison));
:
InvalidCastException
この行で発生
cardwraplayout.Children.Sort((x, y) =>
{
Card card1 = Cards.FindCardByIconId(x.Id);
Card card2 = Cards.FindCardByIconId(x.Id);
int result = card1.Rarity.CompareTo(card2.Rarity);
if (result == 0)
{
result = card1.Name.CompareTo(card2.Name);
}
return result;
});
:、この比較のfuctionを提供
System.InvalidCastException: Specified cast is not valid.
自分のソート機能を実装するためにIList<T>
をIList
にキャストできないのはなぜですか?
更新1: Comparer<T>
からComparer<object>
に変更しようとしても、同じ例外がスローされます。
public static void Sort<T>(this IList<T> list, Comparison<object> comparison)
{
ArrayList.Adapter((IList)list).Sort(Comparer<object>.Create(comparison));
}
Image img1;
Image img2;
cardwraplayout.Children.Sort((x,y) =>
{
img1 = (Image)x;
img2 = (Image)y;
Card card1 = Cards.FindCardByIconId(img1.Id);
Card card2 = Cards.FindCardByIconId(img2.Id);
int result = card1.Rarity.CompareTo(card2.Rarity);
if (result == 0)
{
result = card1.Name.CompareTo(card2.Name);
}
return result;
});
アップデート2: 私は私に次のエラーを与えるであろう、他のクラスからいくつかのフィールドにアクセスする必要があるためはComparerクラスを作成する動作しません。
An object reference is required for the nonstatic field, method, or property "Cards"
「IList」から「IList」AFAIKへの暗黙のキャストはありません。 2つのインターフェースは単に互換性がありません。 'list.ToArray()。Sort ...'を実行するだけです。 –
apokryfos
@apokryfosは私のIListを変更するか、新しいArrayを作成しますか?リストを消去して再投入するのは高すぎます。 –
例外を掲示できますか? – stybl