【发布时间】:2013-06-05 08:04:41
【问题描述】:
我的常量在一个看起来像这样的类中:
public partial class CODE
{
public struct Status
{
public const long Registered = 5;
public const long Active = 6;
}
}
我想在常量上使用 lambda(这行不通):
var foo = CODE.Status.Where(x=> x > 5);
我已经制作了一种方法,可以从我的结构中生成一个字典,这有点接近我的需要。问题是我对这些部分没有任何智能感知。我必须将它们作为字符串传递(由于动态数据类型)。
有什么方法可以让我上面的示例与我当前的常量类一起工作?
private Dictionary<string, Dictionary<string, dynamic>> GenerateConstants(
List<Type> classTypes)
{
var ret = new Dictionary<string, Dictionary<string, dynamic>>();
foreach (Type t in classTypes)
{
var fields = new Dictionary<string, dynamic>();
var structs = t.GetNestedTypes().Where(x => x.IsValueType &&
!x.IsPrimitive && !x.IsEnum);
foreach (var nestedStruct in structs)
{
var innerFields = new Dictionary<string, dynamic>();
foreach (var field in nestedStruct.GetFields())
{
innerFields.Add(field.Name, field.GetValue(null));
}
fields.Add(nestedStruct.Name, innerFields);
}
foreach (var field in t.GetFields())
{
if (field.FieldType == typeof(long))
{
fields.Add(field.Name, field.GetValue(null));
}
}
ret.Add(t.Name, fields);
}
return ret;
}
var constants = GenerateConstants(new List<Type> { typeof(CODE) });
var foo = constants.FirstOrDefault(x => x.Key == "CODE");
【问题讨论】:
-
您当前的类/结构/常量设计没有多大意义。也许描述你真正想要实现的目标。