1

C#ジェネリックは初めてなので、これを正しく行っているかどうかはわかりませんが、いくつかのエラーが発生します。解決していただければ幸いです。

namespace Microsoft.Outlook.ModernPrototype.ViewModels.ItemListView
{
    public class ConversationMap<T> : Dictionary<T, ConversationListItem>
        where T : ConversationKeyInterface<KeyEqualityInterface<T>>
    {
        public ConversationMap() : base(T.getEquality()) { }    // breaks
    }

    public class KeyEqualityInterface<S> : IEqualityComparer<S> 
        where S : ConversationKeyInterface<S> { }

    public interface ConversationKeyInterface<T>
    {
        static T getEquality();
    }
}

壊れているとコメントした場所に注意してください。ここでは何らかの形式のリフレクションを使用する必要があると思いますが、ここでそのための最良の方法が何であるかはわかりません。

4

1 に答える 1

2

問題は実際にはここにあります:

public interface ConversationKeyInterface<T>
{
    static T getEquality();
}

staticでメソッド (またはプロパティ) を定義することはできませんinterface。インターフェイスでは、インスタンス メンバーのみを定義できます。

設計で指定するための他のメカニズムを決定する必要がありIEqualityComparer<T>ます。

于 2012-09-27T23:28:31.550 に答える