C# 如何从c中的常量中选择字符串?
我有一个变量名abc,它的值是ACC# 如何从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您正在寻找类似的值吗
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;
}