如何找到给出名字的枚举的第二个别名?

时间:2013-09-11 16:18:02

标签: c# enums

我有两个枚举:

public enum test1 {
   t1=1,
   t2=0 
}
public enum test2 {
   tt1 = test1.t1,
   tt2= test1.t2 
}

如果我对tt1有所了解,可以从中检索t1。我想使用具有密钥知识的字典,可以获得与该密钥对应的值。

使用以下声明仍然可以获得正确的输出:

var kkk = (test1) test2.tt1 ;

2 个答案:

答案 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 }, 
        };
相关问题