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相同的值填充它。这有意义吗?