0

私は持っている:

Dictionary<int, MyClass> ItemList = new Dictionary<int, MyClass>();

MyClass は次のようなものです。

public class MyClass
{
    public int BaseItemID;
    public string Description;


    public MyClass()
    {
    }

    public class Comparer : IEqualityComparer<MyClass>
    {
        public bool Equals(MyClass x, MyClass y)
        {
            if (ReferenceEquals(x, y))
                return true;
            else if (x == null || y == null)
                return false;
            return x.BaseItemID == y.BaseItemID;
        }

        public int GetHashCode(MyClass obj)
        {
            unchecked
            {
                int hash = 17;
                hash = hash * 23 + obj.BaseItemID.GetHashCode();
                return hash;
            }
        }
    }
}

この比較子を辞書の内容に渡す必要がありますが、苦労しています。辞書はIEqualityComparerコンストラクターで実装するものを使用しますが、次のようになります。

Dictionary<int, MyClass> ItemList = new Dictionary<int, MyClass>(new MyClass.Comparer());

動作していないようで、コンパイル時にエラーが発生します。

どこかにいくつかの型を実装する必要があると思いますが、KeyValuePairどこにあるのかわかりません。

これをノーマルで行っていた場合は機能しますが、このList<MyClass>場合List.Contains(Obj, new MyClass.Comparer())は機能しません。

4

1 に答える 1

1

間違っていなければ、ディクショナリ コンストラクターのオーバーロードには IEqualityComparer が必要です

public Dictionary(IEqualityComparer<TKey> comparer);

コードで「IEqualityComparer of TValue」を渡すと、値ではなく辞書内のキーとのみ比較できます

于 2013-07-12T08:07:10.397 に答える