[英]c# - How to create list/dictionary with descriptive members
我的代码有很多字典,如下所示`
//List[0] => AverageValue,List[1] => MeanValue, List[2] => Maximum
Dictionary<string,List<double>> TestValues ;
//List[0] => Sigma,List[1] => MisValue
Dictionary<string,List<double>> TestSet ;`
所以,如果你看到 List 的不同成员存储不同的类型。 我想在智能感知中访问这些名称。 像TestSet.Sigma=0.1
。 这样我就不会错误地将MisValue分配给SigmaValue 。 我试图从 int 派生类,但它是一个密封类。 var 也没有帮助,因为我无法将它添加到字典中。 元组在我使用的 .net 版本(.net 3.5)中不可用。 所以请有人指导我。
注意:我使用的是 Visual c# express 2008。
编辑:公司给了我“visual c# express 2008”。 从第一个本身开始,这个应用程序就使用这个版本创建了。该应用程序还使用了 3rd 方 dll。 因此,如果我们更改.net 版本,它可能会影响很多事情。
你在这里混合了两种不同的东西:
第一个是滥用列表或字典(它们是在运行时可以通过索引/键访问的任意长度结构),当您想要的是元组或简单的自定义结构时,可以在编译时通过名称访问,从而阻止错误当您想要0
时,您不小心将索引设置为1
。
public struct TestSet
{
double Sigma {get;set;}
double MisValue {get;set;}
}
第二个是你想避免不小心将Sigma
设置为MisValue
,这是一个类型问题。 您最初的方法 - 扩展double
- 是有道理的,但正如您所发现的那样,在 .NET 中是不可能的。 但是您可以使用包装类型和隐式转换来做同样的事情:
public class Sigma
{
public double Value {get; private set;}
public Sigma(double value)
{
Value = value;
}
public static implicit operator double(Sigma sigma)
{
return sigma.Value;
}
public static implicit operator Sigma(double value)
{
return new Sigma(value);
}
}
其他值类型也是如此。 这将允许您将double
分配给它们,而不是彼此分配。 将其与上面的自定义结构相结合,以获得类型安全的体验:
TestSet set = new TestSet();
set.Sigma = 5.1; // works - implicit conversion from double.
double sigmaValue = set.Sigma; // works - implicit conversion.
Sigma anotherSigma = set.Sigma;
set.MisValue = anotherSigma; // doesn't compile - no implicit conversion.
最后,正如评论中提到的,在 IDE 有六次重大修订和对语言有五次(我认为)的情况下使用一个 12 岁的平台是令人沮丧的方法,因为许多指南和在线资源可能会至少已更新到 C# 6。 我能想到使用它的唯一原因是与现有代码的兼容性,最好的做法是更新该代码。 VS2019 有免费的社区版,VSCode 是免费的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.