gpt4 book ai didi

c# - Lambda 表达式作为字典中的键

转载 作者:行者123 更新时间:2023-11-30 12:45:11 29 4
gpt4 key购买 nike

所以很正常Dictionary<string, Action>我这样使用:

validationsDictionary["ThisValidation"]();

但是,字符串可能会被遗漏。所以我想使用模型的属性作为键:

validationsDictionary[x => x.ThisProperty]();

但是,我不知道确切的类型是什么,我试过这些:

Dictionary<Func<Model>, Action>
Dictionary<Expressions<Model>, Action>
Dictionary<Expression<Func<Model>>, Action>

我知道有些人不评价将函数用作键。所以我可以做这样的事情:

void Validate(Expression<Func<Model>> key) 
{
validationsDictionary[key.ToString()]();
}

我不知道key.ToString()是一个正确的属性,但你明白了要点。

编辑

所以,我用了这个:

Expression<Func<DisplayContentViewModel, object>> predicate

它就像一种享受,让我能够做到:x => x.SomeProperty

我想我可以使用 predicate.Name给出名称的字符串表示。所以现在我要弄清楚的是如何填充字典!

最佳答案

所以在查看@SriramSakthivel 关于如何从 lambda 获取属性名称的评论之后,我将它与我的代码结合起来,目前我得到了一个可行的解决方案:

private void Validate(Expression<Func<DisplayContentViewModel, object>> propertyLambda)
{
var key = this.GetValidationKey(propertyLambda);

this.validationsDictionary[key]();
}

private void CreateValidationRule(
Expression<Func<DisplayContentViewModel, object>> propertyLambda,
Action validationAction)
{
if (this.validationsDictionary == null)
{
this.validationsDictionary = new Dictionary<string, Action>();
}

var key = this.GetValidationKey(propertyLambda);

if (this.validationsDictionary.ContainsKey(key))
{
return;
}

this.validationsDictionary.Add(key, validationAction);
}

private string GetValidationKey(Expression<Func<DisplayContentViewModel, object>> propertyLambda)
{
var member = propertyLambda.Body as UnaryExpression;

if (member == null)
{
throw new ArgumentException(
string.Format("Expression '{0}' can't be cast to a UnaryExpression.", propertyLambda));
}

var operand = member.Operand as MemberExpression;

if (operand == null)
{
throw new ArgumentException(
string.Format("Expression '{0}' can't be cast to an Operand.", propertyLambda));
}

return operand.Member.Name;
}

关于c# - Lambda 表达式作为字典中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25680913/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com