【发布时间】:2015-01-01 01:42:21
【问题描述】:
这是一个人为的字符串字面量 switch 语句示例:
static string GetStuff(string key)
{
switch (key)
{
case "thing1": return "oh no";
case "thing2": return "oh yes";
case "cat": return "in a hat";
case "wocket": return "in my pocket";
case "redFish": return "blue fish";
case "oneFish": return "two fish";
default: throw new NotImplementedException("The key '" + key + "' does not exist, go ask your Dad");
}
}
你明白了。
我想做的是通过反射打印每个案例的每个文字字符串。
我在反思方面做得还不够,不知道如何直观地做到这一点。老实说,我不确定反射是否可以做这种事情。
可以吗?如果有,怎么做?
【问题讨论】:
-
反射用于查看对象信息,即类、属性、方法等。这些东西中的代码无法反映。查看访客模式:en.wikipedia.org/wiki/Visitor_pattern
-
不幸的是,链接的问答在这里没有说明。目前还不清楚您所说的“在编译时初始化”是什么意思,该链接中给出的答案特别指出了我之前提到的内容,即如果您有足够的
case标签(IIRC,阈值是七个或更多) 代码无论如何都会变成字典。您想在这里实现哪些实际字典无法实现的目标? -
我不知道这个功能。当时我只是在寻找一个 const Dictionary 。但问题是天气我是否可以通过反射获得这些。这就是我真正需要知道的。我知道字典是要走的路,根据您的建议,我将切换到该机制。
-
但是“const Dictionary”是什么意思? 具体而言,您希望获得什么?如果您担心运行时初始化开销,那么
switch语句并不能解决这个问题(大型开关被实现为运行时初始化字典!)。如果您只是不希望任何其他代码能够修改字典,请参阅ReadOnlyDictionary类
标签: c# .net reflection switch-statement