如何从c#中的常量中选择字符串?

时间:2015-10-13 10:04:50

标签: c# constants

internal class DumbTable
{
     internal const string AC = "V2_AC";
     internal const string DG = "V2_DG"; 
     ......
}

我的变量名称为 abc ,其值为" AC"。

如何选择名称基于 abc 值的常量字符串的值,即AC

5 个答案:

答案 0 :(得分:2)

基于最初的问题,prevoius回答和评论我认为你可以使用这样的字典(散列表):

// Just for simplicity.. in the real world you'd maybe use a property!
Dictionary<string, string> TablenamesDict = new Dictionary(string, string>();


// In your consturctor: Initialize dictionary
TablenamesDict.add('AC','V2_AC');
TablenamesDict.add('DG','V2_DG');
TablenamesDict.add('somekey','somevalue');
...


// You can use the dictionary like this:
string keyName = Getname();
string tableName = TablenamesDict[keyName];

答案 1 :(得分:0)

你在寻找像这样的东西

string val1 = DumbTable.AC;// will give "V2_AC"
string val2 = DumbTable.DG;// will give "V2_DG"

答案 2 :(得分:0)

我认为你想要的是这样的。

abc = Getname();
string tablename = GetTableName(abc);
...

public string GetTableName(string abc)
{
  if (abc == "AC")
   return DumbTable.AC;
  else if (abc == "AG")
   return DumbTable.DG;
  else
   return "";
}

我真的不明白你的问题。

答案 3 :(得分:0)

用Jerry Maguire的话来说,拉菲,&#34;帮助我们帮助你#34;你需要为我们写一个更全面的问题来理解你想要的东西。

我想你可能会说你有一个字符串变量abc,可以为其分配值"AC"或值"DG"。您希望能够使用abc的值来指示您是从Dumbtable检索常量AC还是DC的值。

有比下面的代码更好的方法,但鉴于我们很少继续下去,你可以尝试:

var dummy = new DumbTable();
string result;
if (abc == "AC")
{
    result = dummy.AC;
}
else
{
    result = dummy.DG;
}

答案 4 :(得分:0)

还有一个有趣的事情,如反射。也许,这就是你要找的东西。 Reflection允许您编写可以检查代码本身的各个方面的代码。

例如,看看这段代码:

string abc = "AC";

var field = typeof (DumbTable).GetField(abc, BindingFlags.Static | BindingFlags.NonPublic);

if (field == null) 
{
    // throw Exception, probably
} else {
    var value = field.GetValue(null);
}

Type.GetField 方法返回找到字段的FieldInfo对象,如果找不到找到集null的字段,则返回BindingFlags。< / p>

然而,反射是我认为只有在没有其他方法适合时才应使用的东西。有几篇关于它的文章:

Is it good practice to use reflection in your business logic?
Why is the use of reflection in .NET recommended?

在您的情况下,使用switch语句是最佳方式:

switch (abc)
{
    case "AC";
        break;
    case "DG";
        break;
    default;
        // throw Exception, probably
        break;
}