gpt4 book ai didi

c# - MemberExpression 在不应该的时候强制返回 null

转载 作者:行者123 更新时间:2023-11-30 22:58:24 26 4
gpt4 key购买 nike

我有这个(在 C# MVC 项目中):

public class Bindable<TEntity> 
{
//(...)
public IHtmlString FormControlTextField<T>(string id, Expression<Func<TEntity, T>> member)
{
var prop = (member as MemberExpression).Member;
var strLen = prop.GetCustomAttributes(typeof(StringLengthAttribute), false).OfType<StringLengthAttribute>().FirstOrDefault();
//(...)
}
//(...)
}

出于对我来说有些奇怪的原因,它在方法的第二行抛出 NullReferenceException,因为它从第一行的强制转换返回 null。

该方法是这样调用的(从一个 View ):

@empresa.FormControlTextField(p => p.CNPJ, Model.CNPJ) 

@* "empresa" is an instance of Bindable<EmpresaCliente> *@
@* "CNPJ" is a property in EmpresaCliente *@

这有什么问题吗?或者,是否有针对自定义属性测试“p.CNPJ”的解决方法?

最佳答案

问题是 Expression<Func<TEntity, T>>不是 MemberExpression , 这是一个 LamdaExpression ,这就是类型转换失败的原因。你真正想做的是投member.Body反而。顺便说一句,您应该在代码中使用直接转换:

var prop = ((MemberExpression)member.Body).Member;

或者更好的是,做一个检查:

var expression = member.Body as MemberExpression;
if(expression == null)
{
throw new ArgumentException("Bad expression passed in!");
}
var prop = expression.Member;

关于c# - MemberExpression 在不应该的时候强制返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024209/

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