c# - c# - 如何使用描述性成员创建列表/字典
问题描述
我的代码有很多字典,如下所示
//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”。从第一个本身开始,这个应用程序就是使用这个版本创建的。该应用程序还使用第 3 方 dll。所以如果我们改变.net版本,可能会影响很多事情。
解决方案
你在这里混合了两种不同的东西:
第一种是滥用列表或字典(它们是在运行时可通过索引/键访问的任意长度的结构),当您想要的是一个元组或一个简单的自定义结构时,它可以在编译时通过名称访问,从而在编译时阻止错误您1
在需要时不小心设置为索引0
。
public struct TestSet
{
double Sigma {get;set;}
double MisValue {get;set;}
}
第二个是您要避免意外将 a 设置Sigma
为 a 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.
最后,正如评论中所提到的,使用一个 12 年历史的平台,当时对 IDE 进行了六次重大修订,并且对语言进行了五次(我认为)是令人沮丧的,因为许多指南和在线资源可能会至少已经更新到 C# 6。我能想到使用它的唯一原因是与现有代码的兼容性,最好的办法是更新该代码。VS2019 有免费的社区版,VSCode 是免费的。
推荐阅读
- python - 我该如何尝试:开发和生产之间除外?
- android - Flutter:未找到 MediaQuery 小部件祖先
- pandas - 计算到python中某些点的最近距离
- kubernetes - Kubernetes 中的 subPath 和 mountPath 有什么区别
- linear-search - 如何在 LinearSearch 中使用 Hoare-Logic 解决矛盾
- reactjs - Jest 获取未定义的标签元素
- python - parse:匹配字符串的中间部分
- android - Xamarin Forms - Android - 远程推送通知 - hub.Register(); 发布版本中的异常在调试中很好
- reactjs - 无效公式:/usr/local/Homebrew/Library/Taps/facebook/homebrew-fb/buck.rb
- vba - VBA Word:将字符样式应用于特定段落样式的前两个单词