C#将类属性名作为字符串参数传递
我知道可能有更好的办法,但我有点被难倒了 我有一个静态类,定义如下:C#将类属性名作为字符串参数传递,c#,C#,我知道可能有更好的办法,但我有点被难倒了 我有一个静态类,定义如下: public static class ShuttleState { public static readonly string Item1 = "VALUE MAY COME FROM CONFIG"; public static readonly string Item2 = "VALUE MAY BE DEFINED DIFFERENTLY"; public static
public static class ShuttleState
{
public static readonly string Item1 = "VALUE MAY COME FROM CONFIG";
public static readonly string Item2 = "VALUE MAY BE DEFINED DIFFERENTLY";
public static readonly string Item3 = ConfigurationManager.AppSettings["Item3"];
}
public static class DictionaryOfShuttleState
{
static Dictionary<string, string> _dict = new Dictionary<string, string>
{
{"Item1", ShuttleState.Item1},
{"Item2", ShuttleState.Item2},
{"Item3", ShuttleState.Item3}
};
public static string GetDictionaryValue(string keyValue)
{
string result;
if(_dict.TryGetValue(keyValue, out result)
{
return result;
}
else
{
return String.Empty
}
}
}
现在我有一个传递属性名称的函数,如下所示:
public bool Test(string itemName)
{
bool isTest = false;
var qry = (from a in this.Context.MyTable
select a).FirstOrDefault();
switch(itemName)
{
case "Item1"
isTest = (qry == null) ? false : (String.Compare(qry.TestItem, ShuttleState.Item1, true) == 0);
break;
case "Item2"
isTest = (qry == null) ? false : (String.Compare(qry.TestItem, ShuttleState.Item2, true) == 0);
break;
case "Item3"
isTest = (qry == null) ? false : (String.Compare(qry.TestItem, ShuttleState.Item3, true) == 0);
break;
}
return isTest;
}
那么,我如何将参数作为属性名传递,以便可以简单地执行以下操作:
isTest = (qry == null) ? false : (String.Compare(qry.TestItem, ShuttleState.[itemName], true) == 0);
喜欢使用这个函数吗
bool myTest = Test("Item1");
任何见解都值得赞赏。谢谢
更新:
已经发布了很多信息,以便通过ConfigurationManager简单地解决问题。请注意,我只是作为一个局部示例说明了这一点,因为静态类(包括派生的值)到处都是。目前,我只能阅读静态类中定义的值。对于那些可能无意中发现这一点的人,我借鉴了dictionary,仍然阅读静态类 我的代码如下:
public static class ShuttleState
{
public static readonly string Item1 = "VALUE MAY COME FROM CONFIG";
public static readonly string Item2 = "VALUE MAY BE DEFINED DIFFERENTLY";
public static readonly string Item3 = ConfigurationManager.AppSettings["Item3"];
}
public static class DictionaryOfShuttleState
{
static Dictionary<string, string> _dict = new Dictionary<string, string>
{
{"Item1", ShuttleState.Item1},
{"Item2", ShuttleState.Item2},
{"Item3", ShuttleState.Item3}
};
public static string GetDictionaryValue(string keyValue)
{
string result;
if(_dict.TryGetValue(keyValue, out result)
{
return result;
}
else
{
return String.Empty
}
}
}
好吧,你可以使用反射来获得所需的属性,但我觉得这整件事可能是一个问题。从您发布的代码中很难了解您试图解决的实际问题-您能再解释一下吗?为什么不能使用String.Compare(qry.TestItem,ConfigurationManager.AppSettings[itemName],true)==0?@Valentin-ConfigurationManager.AppSettings到处都是。在这个阶段,我必须更多地依赖静态类。为什么不将所有配置定位到一个单独的映射中,这样就不必到处寻找它们。然后,如果(qry==null){return false;}返回(String.Compare(qry.TestItem,yourMap[itemName],true)==0),您就可以
代码>或使用@GlennFerrierepsonse@Batuta您可以创建字典并使用与ConfigurationManager.AppSettings相同的值填充它。这有意义吗?