如何检查常量中是否存在字符串

时间:2012-07-30 16:42:47

标签: c# .net

请不要告诉我改用enum。如何检查“testStr”是否在结构“供应商”中?

public struct Supplier {
    public const string
        NA = "N/A",
        companyA = "companyA",
        companyB = "companyB";
}

string testStr = "companyA";

5 个答案:

答案 0 :(得分:4)

这可以通过反思来实现:

void Main()
{
  // make sure that we only take public static const
  string phrase = "companyA";
  var fields = typeof(Supplier).GetFields(BindingFlags.Static | BindingFlags.Public).Where(i => i.IsLiteral);
  foreach (FieldInfo field in fields)
  {
    string val = field.GetRawConstantValue().ToString();
    string msg = string.Format("is '{0}' equal to '{1}' => {2}", val, phrase, val == phrase);
    Console.WriteLine(msg);
  }
}

// Define other methods and classes here
public struct Supplier {
    public const string
        NA = "N/A",
        companyA = "companyA",
        companyB = "companyB";
};

答案 1 :(得分:2)

这应该这样做

  string toSearch = "companyA";
            var hasField = typeof(Supplier).GetFields(BindingFlags.Public | BindingFlags.Static).
                Select(x => x.GetRawConstantValue().ToString()).Contains(toSearch);

答案 2 :(得分:1)

您可以构造一个数组,并使用LINQ进行搜索:

if (new[] {Supplier.NA, Supplier.companyA, Supplier.companyB}.Contains(testStr)) {
    ...
}

在旁注中,我假设您意识到定义struct Supplier的方式非常不正统(这是最礼貌的方式),因为它没有字段,只有常量。

答案 3 :(得分:0)

您需要使用reflextion来检索结构的成员名称。 这很容易:

using System.Reflextion;

static void Main()
{
    if (MemberExists(typeof(Supplier), testStr))
        Console.WriteLine(testStr + " exists in Supplier");
    else
        Console.WriteLine(testStr + " does not exists in Supplier");
}

public bool MemberExists(Type structure, string name)
{
    foreach(MemberInfo member in structure.GetMembers())
        if (member.Name == name) return true;
    return false;
}

希望这会对你有所帮助,正如你从不同的答案中看到的那样,在反思中有很多选择。

答案 4 :(得分:0)

虽然这本身并没有回答你的问题,但我开始时的想法和你的想法类似但是把它转移到别的地方。反射比你想要的慢(至少对我而言),所以我没有使用反射来解决我的问题,而是将原始结构恢复为字符串列表(如果值的数量是常数,则将字符串数组恢复)并使用包含扩展方法。

这是一个简单的一个班轮。它简化了搜索代码,同时不会增加内存消耗,也不会增加复杂性(根据我的计算,它比使用反射更快)。

所以基本上你的枚举将有一个包含三个字符串的数组。您需要记住数组中的哪个是哪个,然后只需调用Array.Contains方法来检查该数组中是否存在该字符串