提问人:Bob.at.Indigo.Health 提问时间:1/7/2020 最后编辑:Bob.at.Indigo.Health 更新时间:1/10/2020 访问量:208
如何验证方法外部的条件
How to verify condition outside of a method
问:
有没有办法在代码中创建类变量时验证其完整性?
例如,我创建并初始化一个类成员变量,如下所示:
public class MyClass
{
public static Dictionary<MyEnum, int> SomeDictionary = new Dictionary<MyEnum, int> {
{ MyEnum.First, 9 },
{ MyEnum.Second, 7 },
{ MyEnum.Third, 17 }
};
// This obviously doesn't compile
Debug.Assert(<SomeDictionary contains good stuff>);
// Some method in my class
public void SomeMethod()
{
// I could use something like this in this method to verify
// the integrity of SomeDictionary, but I'd rather do this
// at the point (above) where SomeDictionary is defined.
Contract.Requires(<SomeDictionary contains expected stuff>);
}
}
正如我在代码中指出的那样,我想在“类”范围内验证我的数据内容,但只能在方法(或属性)范围内工作。Debug.Assert
Contract.Requires
编辑: 这个问题最初使用一个列表,其内容与枚举(切向)相关,但人们关注的是该列表是如何从枚举派生的,而不是如何验证列表内容的问题。因此,我完全重写了这个问题,以澄清这个问题是关于验证的,而不是关于构建数据结构的。
答:
0赞
fanuc_bob
1/7/2020
#1
如果你的类型是你所声明的,它是在项目中的其他位置定义的,你可以从枚举创建列表。
using System.Linq;
enum Stuff
{
UglyStuff,
BrokenStuff,
HappyStuff
}
public class MyStuff
{
public static List<string> MyList => System.Enum.GetNames(typeof(Stuff)).ToList();
}
0赞
x00
1/9/2020
#2
静态构造函数也是一个方便的地方,可以对类型参数强制执行运行时检查,而类型参数在编译时无法通过约束(类型参数约束)进行检查。
在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
但是单元测试可以更好。如果不是因为它们与代码相去甚远,必须单独编写和维护。但至少它们没有运行时开销。
评论
0赞
x00
1/9/2020
@Gauravsa我认为更新,或者更好地称其为完全重写会使我的第一个答案下的评论变得无关紧要。我错了吗?
1赞
Gauravsa
1/9/2020
好吧,评论可以由相应的用户删除。很多时候,人们会删除不再相关的评论
评论