-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 及其内容。我还计划添加其他方法,如添加、删除等,但如果我无法在列表中执行简单的搜索,我肯定无法再进一步。

有谁知道我是否走在正确的道路上?如果没有,你能指出正确的路径吗?

谢谢你。

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 回答