【发布时间】:2017-12-07 12:52:13
【问题描述】:
我正在尝试创建某种映射并基于此构造一个 switch 语句。
我尝试的第一件事是:
public class Class1
{
public void Test()
{
string testString_A = "A";
string testString_B = null;
switch (testString)
{
case Options.O1.aName:
testString_B = Options.O1.bName;
break;
case Options.O2.aName:
testString_B = Options.O2.bName;
break;
}
}
}
public static class Options
{
public static Option O1 = new Option()
{
aName = "A1",
bName = "B1"
};
public static Option O2 = new Option()
{
aName = "A2",
bName = "B2"
};
}
public class Option
{
public string aName;
public string bName;
}
在这种情况下,编译器会抱怨 switch case 需要一个常量值。
接下来,我尝试了以下方法,但它也不起作用。我尝试在 switch 语句中使用的.aName 似乎无法访问。
public Class1()
{
public void Test()
{
string testString = "A1";
switch (testString)
{
case Options.O1.aName:
...
}
}
}
public static class Options
{
public static Option_O1 O1 = new Option_O1();
public static Option_O2 O2 = new Option_O2();
}
public class Option_O1
{
public const string aName = "A1";
public const string bName = "B1";
}
public class Option_O2
{
public const string aName = "A2";
public const string bName = "B2";
}
我怎样才能完成我想要的?
【问题讨论】:
-
需要常量,所以使用常量:
case Option_O1.aName: -
@David 那么,我无法在一个静态类下收集它们吗?
-
好吧,你可以让它们在那个类而不是其他类上成为常量。静态或其他没有区别,它们是编译时常量。我想目前还不清楚你的动机是什么,或者你具体想要完成什么。
标签: c#