C# 循环一个类中的所有常量

C# 循环一个类中的所有常量,c#,asp.net,loops,constants,C#,Asp.net,Loops,Constants,我想循环静态类中的所有常量变量。比如说 public class SiteDetails { public const string SD_MAIN_TRUST = "MainTrust"; public const string SD_MAIN_COLLEGE = "MainCollege"; } 我想逐个读取常量以检查是否匹配。获取您类型的所有公共静态字段: Type type = typeof(SiteDetails); var flags = BindingFlags.

我想循环静态类中的所有常量变量。比如说

public class SiteDetails
{
    public const string SD_MAIN_TRUST = "MainTrust";
    public const string SD_MAIN_COLLEGE = "MainCollege";
}

我想逐个读取常量以检查是否匹配。

获取您类型的所有公共静态字段:

Type type = typeof(SiteDetails);
var flags = BindingFlags.Static | BindingFlags.Public;
var fields = type.GetFields(flags); // that will return all fields of any type
如果只想检查常量,可以添加
IsLiteral
过滤

var fields = type.GetFields(flags).Where(f => f.IsLiteral);
然后检查任何字段的值是否等于您的值:

string value = "MainCollege"; // your value
bool match = fields.Any(f => value.Equals(f.GetValue(null)));
您可以使用Linq枚举常量:


所有常数都有效相关吗?听起来您应该使用枚举。请参阅:Getfields()没有返回常量。我想一个接一个地读取所有常量。@Nathiya我想你没有试过我的代码。您有静态文本字段,应该使用GetFields()方法读取。我刚才试过您的代码,它只提供零个字段。var flags=BindingFlags.Static | BindingFlags.Public;var field1s=classType.GetFields(标志)@Nathiya刚刚验证过-它给了我两个字段
SD\u MAIN\u TRUST
SD\u MAIN\u COLLEGE
。确保您使用的代码与我提供的代码完全相同。还要确保您的真实类具有name
SiteDetails
,并且它确实包含字段。现在,我在包含BindingFlags后得到结果。Instance我得到结果。为了检查字段,如何使用循环获取所有字段?
  foreach(FieldInfo info in typeof(SiteDetails).GetFields().Where(x => x.IsStatic && x.IsLiteral)) {
    // info is the constant description with
    // info.Name       - constant's name  (e.g. "SD_MAIN_TRUST")
    // info.GetValue() - constant's value (e.g. "MainTrust")
    ...
  }