Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#检查字符串是否等于常量名称_C# - Fatal编程技术网

C#检查字符串是否等于常量名称

C#检查字符串是否等于常量名称,c#,C#,我不确定这是否是可能的,或者我是否应该使用其他东西,然后const 我有大约50个常量字符串,都是唯一的值。程序将读取一个常量名称之一的字符串 我想要的是: private const string AllPlace1 = "1355,-203,-4,0.002551732,0.705572185,0.708626711,0.003092848,-1,0,0,0"; private const string MoveDown1 = "1355,-203,-24,0.002551735,0.705

我不确定这是否是可能的,或者我是否应该使用其他东西,然后const

我有大约50个常量字符串,都是唯一的值。程序将读取一个常量名称之一的字符串

我想要的是:

private const string AllPlace1 = "1355,-203,-4,0.002551732,0.705572185,0.708626711,0.003092848,-1,0,0,0";
private const string MoveDown1 = "1355,-203,-24,0.002551735,0.705572183,0.708626713,0.00309285,-1,0,0,0";
private const string Free1 = "1355,-108,-24,0.002551719,0.705572218,0.708626678,0.003092837,-1,0,0,0";
当给出字符串“AllPlace1”时,系统应打印const
AllPlace1
的值

当然,对于所有可能的情况,我都可以这样写,但对于50个可能的值,我不想这样做

if (args[3] == "AllPlace1")
    WriteLine(AllPlace1);
else if (args[3] == "MoveDown1")
    WriteLine(MoveDown1);
etc

你可以用字典来代替:

static readonly Dictionary<string, string> NameValueMapper = new Dictionary<string, string>{
    { "AllPlace1", "1355,-203,-4,0.002551732,0.705572185,0.708626711,0.003092848,-1,0,0,0"},
    { "MoveDown1", "1355,-203,-24,0.002551735,0.705572183,0.708626713,0.00309285,-1,0,0,0"},
    { "Free1"    , "1355,-108,-24,0.002551719,0.705572218,0.708626678,0.003092837,-1,0,0,0"},
};

请尝试
nameof(AllPlace1)
。虽然更好的设计是创建一个包含名称和值的字典,但您可能想要一个
字典而不是一堆常量?您可以在函数中使用
type.GetFields
的反射来获取所需的内容。这可能会起作用
Console.WriteLine(this.GetType().GetField(“yourstring”).GetValue(this))
或取决于您的类别。根据@David comment,我认为此链接对您有用:现在为什么有人要使用
字典
保存常量,这样做他们就不再是常量了。。。此外,现在无论在哪里使用这些都必须重做…
我永远不会在这里用反射的方式来找出是否有一个具有给定名称的私有常量,以及为什么?否则,您将如何在没有反射的情况下获取常量值(给定名称)?@đěxěŕ:顺便说一句,您仍然可以将常量添加到此字典中。例如:
…新字典{{“AllPlace1”,AllPlace1},…}
是的,您仍然可以将常量添加到字典中,但是使用这些常量的任何地方都将不再可用,代码将不得不重构,我想,请选择您的毒药。我也同意这种方法对于OP是不正确的,但是OP目前正在执行的实现,反射将是最小的,而不改变任何常数等等。@đxěxŕ:为什么?这些常量仍然可用,并且存在和使用它们的每一个代码仍然可以工作。只有他根据args参数中的名称确定值的代码(无论如何都是新代码)才会使用此字典。但是代码直接使用这些常量的次数越多,他服用的毒药就越多。
if (NameValueMapper.TryGetValue(args[3], out string value))
{
    WriteLine(value);
}