我想使用对象属性作为字典的键。这可以做到吗?
这样做的最终目标是使用它,以便可以在对象可能处于的各种状态下查看属性是否被锁定。这些锁定的值不会持久存在,仅存在于模型的业务规则中。
查看字段是否被锁定的理想代码如下所示;
bool ageLocked = myObject.IsFieldLocked( x => x.Age);
bool nameLocked = myObject.IsFieldLocked(x => x.Name);
IsFieldLocked 是 myObject 类型的扩展方法。
我希望字典位于 myObject 中,并且可以根据对象的状态替换为不同的字典变体,例如,已下订单或等待订单将具有不同的字典定义。
希望我能够使用工厂来创建不同的字典变体;
Factory.CreateAwaitingOrderLockedFields()
Factory.CreateOrderPlacedLockedFields()
定义字典看起来像这样
new Dictionary< ***MissingMagic***, bool>()
{
{ x => x.Age , true},
{ x => x.Name, false}
}
目的是避免键成为字符串,强类型键更可取。
我将字典简单地定义为Dictionary<string, bool>
.
扩展方法可能如下所示:
public static bool IsFieldLocked<TField>(this MyClass self, Expression<Func<MyClass, TField>> propertyExpression)
{
// note: null checks etc omitted for brevity
var lambda = (LambdaExpression)propertyExpression;
MemberExpression memberExpression;
if (lambda.Body is UnaryExpression)
{
var unaryExpression = (UnaryExpression)lambda.Body;
memberExpression = (MemberExpression)unaryExpression.Operand;
}
else
{
memberExpression = (MemberExpression)lambda.Body;
}
string propertyName = memberExpression.Member.Name;
return self.InternalLockedFieldsDictionary[propertyName];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)