C# 如何将字典转换为实现相同类型字典的my类?
如果我有C# 如何将字典转换为实现相同类型字典的my类?,c#,generics,type-conversion,C#,Generics,Type Conversion,如果我有 public class Stats : Dictionary<string, double> { } public class Info : Dictionary<string, Stats> { } 我需要使用什么运算符或代码才能引用我的实例 [从字典继承的类] 从 字典?在您的方法中确实存在两个不同的错误: 字典与字典不同。将Info视为继承Dictionary是错误的。它继承了字典,这是完全不同的 即使获得了正确的基类型,也不能将基类型的任何随机实例
public class Stats : Dictionary<string, double>
{
}
public class Info : Dictionary<string, Stats>
{
}
我需要使用什么运算符或代码才能引用我的实例
[从字典继承的类]
从
字典
?在您的方法中确实存在两个不同的错误:
字典
与字典
不同。将Info
视为继承Dictionary
是错误的。它继承了字典
,这是完全不同的public class Info : Dictionary<string, Stats>
{
public static explicit operator Info(Dictionary<string, Dictionary<string, double>> source)
{
Info result = new Info();
foreach (var kvp in source)
{
result.Add(kvp.Key, Stats.FromDictionary(kvp.Value));
}
return result;
}
}
using Stats = System.Collections.Generic.Dictionary<string, double>;
using Info = System.Collections.Generic
.Dictionary<string, System.Collections.Generic.Dictionary<string, double>>;
但这是一个编译器错误:
Stats.explicit操作符Stats(System.Collections.Generic.Dictionary)':不允许与基类进行用户定义的转换
此处将更详细地介绍这一点:。简短的版本是,如果编译器允许这样做,那么如果您试图从基引用强制转换为派生引用,那么其意图将是不明确的。在这种情况下,语言会迫使您明确
那么您要使用的语句将起作用:
var test = (Info)data;
综上所述,您在评论中写道:
该类只是清理代码并使用我的类名,而不是字典
如果是这种情况,那么您可能只想使用类型名别名,而不是继承。例如:
public class Info : Dictionary<string, Stats>
{
public static explicit operator Info(Dictionary<string, Dictionary<string, double>> source)
{
Info result = new Info();
foreach (var kvp in source)
{
result.Add(kvp.Key, Stats.FromDictionary(kvp.Value));
}
return result;
}
}
using Stats = System.Collections.Generic.Dictionary<string, double>;
using Info = System.Collections.Generic
.Dictionary<string, System.Collections.Generic.Dictionary<string, double>>;
使用Stats=System.Collections.Generic.Dictionary;
使用Info=System.Collections.Generic
.字典;
然后,您可以将名称
Stats
和Info
分别与Dictionary
和Dictionary
互换使用。您不能从基类实例化,然后将其用作继承类的对象。你想用它做什么?@AshkanSirous:这个类只是清理代码并使用我的类名,而不是字典
我想你对这个对象有一些功能。正确的?创建一个类并将该对象作为该类的属性,并用功能将其封装。顺便说一句,我觉得这是个错误的设计。您想用一个键创建两个值吗?为什么你有一本字典中的字典?在这里你可以找到从字典继承的方法:如果你有一本字典中的字典,它将以同样的方式工作,但我确信你有一个错误的设计我学到了一个好代码。谢谢。:)顺便说一下,我从来没有遇到过这样的情况。为什么有人需要一本字典中的一本。我得到一个错误似乎有点奇怪。Stats.explicit operator Stats(System.Collections.Generic.Dictionary)”:在声明Stats的显式运算符时,不允许用户定义与基类之间的转换。
。你知道为什么吗?@Ibiza:oh,oops。我忘了。这里有一个很好的解释:。我将更新答案以解决此问题。
var test = (Info)data;
using Stats = System.Collections.Generic.Dictionary<string, double>;
using Info = System.Collections.Generic
.Dictionary<string, System.Collections.Generic.Dictionary<string, double>>;