-1

私はジェネリック型を学ぼうとしていますが、次のコードを記述しました。

public class MyProp<TDictonary, TValor>
    {
        private List<TDictonary> MyDictionary = new List<TDictonary>();
        private List<TValor> TValue = new List<TValue>();

        public MyProp<TDictonary, TValue> Search(TDictonary dictionary)
        {
            MyProp<TDictonary, TValor> dic = new MyProp<TDictonary, TValor>();
            var test = MyDictionary.FirstOrDefault(item => item == dictionary);
            return dic;
        }

そこで、C#辞書のようなものを作成しようとしました。私がやろうとしたのは、TDictionaryとTValueをリストに関連付け、それらをジェネリック型に追加して、MyPropとそのコンテンツを返すことでした。Add、Removeなどの他のメソッドも追加する予定ですが、リスト内で単純な検索を実行できない場合は、それ以上進むことはできません。

私が正しい道を進んでいるかどうか誰かが知っていますか?そうでない場合は、正しい道を示すことができますか?

ありがとうございました。

4

2 に答える 2

1

ジェネリック型の制約を追加して、呼び出すことができるようにします.Equals

public class MyProp<TKey, TValue>
   where TValue : IEquatable<TKey>


MyProp<TDictonary, TValor> prop = new MyProp<TDictonary, TValor>();
var val = MyDictionary.FirstOrDefault(item => item.Equals(dictionary));
prop.Key = val;
prop.Value = val;
return dic;
于 2012-05-26T22:36:12.203 に答える
1

C#辞書のようなものを作成しようとしました

あなたは知ってSystem.Collections.Generic.Dictionary<TKey, TValue>いますよね?

とにかく、あなたのジェネリック (または型でさえ) が実際に何を表すことを意図しているのかわかりません (より明確な名前を付けてください!)。

ただし、いくつかのヒントがあります。

  • このメソッドでは、インスタンスを作成し、dicそれに対して何もせず、それを単に返します – 以前に行ったことに関係なく。
  • あなたはフィールドでのみ作業しますMyDictionaryが、フィールドは完全に無視しTValueます。
  • プライベート フィールドは、通常camelCase、小文字で始まる で名前が付けられます。
  • プライベート フィールドの名前付けはTValue先頭T. これは通常、ジェネリック型のみに予約されています。

次のエラーが表示されます: エラー 1 演算子 '==' はタイプ 'TDictonary' および 'TDictonary' のオペランドに適用できません

これは、型が制限のないジェネリック型であるためです。そのため、コンパイラは演算子に対してどの比較を行うかを決定できないため、参照型または値型のいずれかになります==。値型または参照型のいずれかである基本型を指定することは、単純ではあるがおそらく制限的な修正です。

public class MyProp<TDictonary, TValor>
    where TDictionary : class
于 2012-05-26T22:43:44.387 に答える