我有两个枚举:
public enum test1 {
t1=1,
t2=0
}
public enum test2 {
tt1 = test1.t1,
tt2= test1.t2
}
如果我对tt1有所了解,可以从中检索t1。我想使用具有密钥知识的字典,可以获得与该密钥对应的值。
使用以下声明仍然可以获得正确的输出:
var kkk = (test1) test2.tt1 ;
答案 0 :(得分:2)
嗯,您显示的代码有点令人困惑,因为test1
从零开始,因此声明test2
如下:
public enum test2 {
tt1,
tt2
}
类似。
尽管如此,如果我有一个test2
值,比如tt1
,我实际上可以将其转换为test1
值:
var t = (test1)test2.tt1;
因为它们共享相同的基础int
值。因此,您可以假设有一个字典Dictionary<test1, object>
,并使用test2
变量从中获取值:
var val = d[(test1)test2.tt1];
答案 1 :(得分:0)
简短回答是:否。
在编译时必须知道枚举的初始值。然后编译器将其转换为(在您的情况下)为int。
因此test1.t2将为1,而test2.tt2将具有相同的值。但是从代码视图来看,这只是两个相同的值,根本不相关。
如果你想确切地知道enum tt2取值,你将不得不使用例如。一些自定义属性,并通过反射接收此信息。
或者只填充自己的字典(手动)
Dictionary<test1, test2> dict = new Dictionary<test1, test2>() {
{ test1.t1, test2.tt1 },
{ test1.t2, test2.tt2 },
};