c# - 没有泛型的字典

标签 c# base-class

我正在学习 C#,我对这三个类(class)进行了练习:

public abstract BaseClass<T> Where T : BaseClass<T>

public class Class1

public class Class2 : BaseClass<Class2>

练习中有这样的内容:

var dictionary = new Dictionary { [class1] = class1, [class2] = class2 };

我认为这里,DictionaryDictionary<object, object> 的快捷方式;所以我已将此类添加到项目中:

public class Dictionary : Dictionary<object, object>

我的问题是我不确定我是否正确声明了 Dictionary 。现在该练习完美运行,但也许还有另一种选择来声明 Dictionary 。对了,我用过dynamic而不是object而且它也有效。

我的问题是:

在练习中,是 Dictionary自定义类还是 .NET Framework 中的另一个类或者我不知道的其他类?

最佳答案

练习中的语法无效:

var dictionary = new Dictionary {
    [class1] = class1
,   [class2] = class2
};

这看起来像一个 C# 6 字典初始值设定项,它期望显式指定字典的类型参数:

var dictionary = new Dictionary<object,object> {
    [class1] = class1
,   [class2] = class2
};

您不需要创建自己的从 Dictionary<TKey,TVal> 派生的类,或使用dynamic .

注意:使用object键和值类型都是必需的,因为您的字典示例使用类 Class1Class2作为键和值,而这些类除了 object 之外没有共同的祖先.

编辑:

I can't modify the exercise. So, I need to do something to make it compile

您的解决方案派生 Dictionary来自Dictionary<object,object>那么就可以了。您也可以自己写Dictionary类采用类似字典的初始值设定项,但这将是一个更困难的练习。

关于c# - 没有泛型的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997346/

相关文章:

c# - 在递归方法中使用 LinqToSql 对性能非常不利

c# - 从函数返回而不破坏对象

c# - 已知地址时如何获取坐标?

c++ - 需要从 C++ 中的派生类调用基本析构函数方法?

java - 为什么基类调用子类的方法?

c# - 如何在同一个集合中存储不同类型的泛型类(都具有泛型基类)?

c# - ASP.NET 验证器 - 检查两个文本框的总和是否等于某个值

c++ - 从子类的构造函数体调用基类的构造函数

c# - 使用 IoC 将依赖项注入(inject)基类和子类?

c# - OWIN 自定义身份验证服务