Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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中的常量中选择字符串?_C#_Constants - Fatal编程技术网

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

C# 如何从c中的常量中选择字符串?,c#,constants,C#,Constants,我有一个变量名abc,它的值是AC 如何选择名称基于abc值的常量字符串的值,即AC您正在寻找类似的值吗 internal class DumbTable { internal const string AC = "V2_AC"; internal const string DG = "V2_DG"; ...... } 我想你想要的是这样的东西 string val1 = DumbTable.AC;// will give "V2_AC" string val2

我有一个变量名abc,它的值是AC


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

您正在寻找类似的值吗

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

我想你想要的是这样的东西

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

我真的不明白你的问题。

用杰瑞·马奎尔的话说,拉菲,帮助我们,帮助你。你需要写一个更完整的问题让我们了解你想要什么

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

有比下面的代码更好的方法,但考虑到我们没有什么可以继续,您可以尝试:

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 "";
}

根据最初的问题、prevoius的回答和评论,我认为您可以使用字典和如下哈希表:

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

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

例如,请查看以下代码:

// 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];
方法为找到的字段返回FieldInfo对象,如果未找到具有set BindingFlags的字段,则返回null

然而,我认为,只有在没有其他合适的方法的情况下,才应该使用反思。关于它有几篇文章:

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

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);
}

abc在给定代码段中的位置“选择”是什么意思?您能说明您当前如何尝试使用这些常量吗?我们必须假设,不是吗?是的,abc将是AC或DG。请澄清您的问题。它目前没有意义。不,如果它是AC,那么只有它会像DumbTable一样使用。AC。意味着它应该依赖于abc值abc=Getname//返回AC,DG,string tablename=//如果是AC,则返回V2_AC GetDumbDatatablename;谢谢在不使用if或case的情况下是否有其他方法?您想要的是在运行时访问变量的值,并且该变量的名称也将在运行时计算。我认为在您的情况下没有任何简单的替代方法
switch (abc)
{
    case "AC";
        break;
    case "DG";
        break;
    default;
        // throw Exception, probably
        break;
}