繁体   English   中英

从C#表达式获取对对象的引用

[英]Get reference to object from c# expression

我有一个扩展通用方法

public static void AddError<TModel>(
    this ModelStateDictionary modelState, 
    Expression<Func<TModel, object>> expression, 
    string resourceKey, 
    string defaultValue)
{
    // How can I get a reference to TModel object from expression here?
}

我需要从表达式获取对TModel对象的引用。 此方法由以下代码调用:

ModelState.AddError<AccountLogOnModel>(
    x => x.Login, "resourceKey", "defaultValue")

如果不将TModel对象传递给方法,则无法访问它本身。 您传递的表达式只是说“从TModel获取此属性”。 它实际上并没有提供要运行的TModel。 因此,我将代码重构为如下形式:

public static void AddError<TModel>(
    this ModelStateDictionary modelState, 
    TModel item,
    Expression<Func<TModel, object>> expression, 
    string resourceKey, 
    string defaultValue)
{
    // TModel's instance is accessible through `item`.
}

然后,您的调用代码将如下所示:

ModelState.AddError<AccountLogOnModel>(
    currentAccountLogOnModel, x => x.Login, "resourceKey", "defaultValue")

我想您真的希望文本“ Login”用于向ModelStateDictionary添加新的模型错误。

public static void AddError<TModel>(this ModelStateDictionary modelState, 
  Expression<Func<TModel, object>> expression, string resourceKey, string defaultValue)
{
    var propName = ExpressionHelper.GetExpressionText(expression);

    modelState.AddModelError(propName, GetResource("resourceKey") ?? defaultValue);
}

假设您有一些资源工厂/方法,如果找不到该资源,则返回null ,这仅用于说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM