是否可以枚举对象中的公共静态字符串?

时间:2011-03-09 11:33:00

标签: c#

在这段代码中,他们使用了这种结构而不是枚举:

包含所有公共静态字符串的公共类。

是否可以枚举类中的静态字符串?

3 个答案:

答案 0 :(得分:6)

这将枚举类MyClass中的公共静态字段的字符串值:

var flags = BindingFlags.Public | BindingFlags.Static;
var query = typeof(MyClass)
        .GetFields(flags)
        .Where(fieldInfo => fieldInfo.FieldType == typeof(string))
        .Select(fieldInfo => fieldInfo.GetValue(null));
foreach (var value in query) {
    // ...
}

对于公共静态属性,它几乎相同:

var flags = BindingFlags.Public | BindingFlags.Static;
var query = typeof(MyClass)
        .GetProperties(flags)
        .Where(propertyInfo => propertyInfo.PropertyType == typeof(string))
        .Select(propertyInfo => propertyInfo.GetValue(null, null));
foreach (var value in query) {
    // ...
}

答案 1 :(得分:1)

使用反射: yourobject.GetType().GetFields(BindingFlags.Static|BindingFlags.Public)将返回班级的所有静态字段。

答案 2 :(得分:0)

我开始在其他答案之前写这个,所以也可以发布我的答案。

public class PublicStringIteration
{
    static void Main(string[] args)
    {
        MyStrings myStrings = new MyStrings();
        foreach (string value in myStrings.GetStaticFieldValues())
        {
            Console.WriteLine(value);
        }
    }

}

public class MyStrings
{
    public static string String1 = "String1 Value";
    public static string String2 = "String2 Value";
    public static string String3 = "String3 Value";
}

public static class MyStringsExtensions
{
    public static IEnumerable<string> GetStaticFieldValues(this MyStrings myStrings)
    {
        Type myClassType = typeof(MyStrings);
        foreach (MemberInfo info in myClassType.GetMembers())
        {
            if (info.MemberType == MemberTypes.Field)
            {
                yield return myClassType.GetField(info.Name).GetValue(info).ToString();
            }
        }
    }

}