c# - 多个级别的等效名称
问题描述
在一个.cshtml
页面中,我想避免编写字符串,以便获得编译器对拼写错误的支持。我所追求的是等价nameof
但不同的。例如,
nameof(Three.Four.Five) // returns Five
但我想退回“三.四.五”。我已经有以下内容:
public static string FullHtmlFieldNameFor<T, TResult>(this HtmlHelper<T> html, Expression<Func<T, TResult>> expression)
{
return html.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
}
我使用但这是不同的,因为我这样使用它:
<label>@Html.FullHtmlFieldNameFor(x=> x.One.Two.Three.Four.Five)</label>
如您所见,上面将返回“One.Two.Three.Four.Five”,但我希望名称为“Three.Four.Five”。我正在考虑在上面添加另一个参数来指定从表达式返回多少级别。例如,3 将返回“Three.Four.Five”,但使用它会是这样的:
<label>@Html.FullHtmlFieldNameFor(x=> x.One.Two.Three.Four.Five, 3)</label>
但我不喜欢这样,因为当您阅读代码时,您仍然会看到“One.Two.Three.Four.Five”,而且标签似乎是“One.Two.Three.Four.Five”。
问题
我怎样才能通过Three.Four.Five
或像x => x.Three.Four.Five
上述场景中的表达式?
编辑
我什至创建了这个方法:
public static string GetFieldName<T, TResult>(Expression<Func<T, TResult>> expression)
{
return ExpressionHelper.GetExpressionText(expression);
}
但使用太忙:GetFieldName<Two, int>(x => x.Three.Four.Five)
解决方案
如果您创建一个带有两个参数的助手会怎样?
public static string FullHtmlFieldNameFromFor<TBase, T, TResult>(this TBase obj, Func<TBase, T> _, Expression<Func<T, TResult>> expression) => ExpressionHelper.GetExpressionText(expression);
然后你可以使用:
<label>@Html.FullHtmlFieldNameFromFor(x => x.One.Two, x => x.Three.Four.Five)</label>
或者,如果您为每个子类创建多个帮助器,您可能希望将其用作名称基础,该怎么办?
public static string GetFieldName(Expression<Func<cTwo, object>> expression) => ExpressionHelper.GetExpressionText(expression);
public static string GetFieldName(Expression<Func<cThree, object>> expression) => ExpressionHelper.GetExpressionText(expression);
然后你可以使用每一个。
推荐阅读
- javascript - 如何从javascript中的嵌套函数返回值
- java - 每次执行 Scenario Outlines 的值时,浏览器都会再次加载
- angular - 通过 Azure B2C 将 Angular 8 应用程序调用到 .NET Core Web API
- python - 在数据框中获取值而不是布尔值
- javascript - 如何通过 Jquery 显示 SplashScreen
- android-studio - Dart/Flutter 的方法签名重构 - 在 Android Studio 中可用?
- node.js - npm start 以前可以在我的电脑上工作,现在不行了
- openam - 只允许管理用户登录的 OpenAM 身份验证链?
- azure - 为什么我在 Azure 应用程序网关中看到 403 被禁止?
- swift - macOS Swift TextField.stringValue 在我单击其他内容之前不会返回更新的值