通过显式引用属性来获取c# . net资源属性名



有点奇怪,但我的疯狂背后是有原因的。

我有一个资源,我已经设置了一些字符串属性,例如MenuAdminLabelMenuAccountsLabel,分别具有"Admin"one_answers"Accounts"等值。我需要将标签属性名称传递到一个方法中,我很清楚我可以将这些作为"MenuAdminLabel"one_answers"MenuAccountsLabel"等字符串传递,但我希望这些由编译器验证,而不是简单的字符串,因为资源上有很多属性,我想确保每个引用都是正确的。

麻烦的是,如果我访问Resource.MenuAdminLabel我(显然)获得资源属性的值,而不是属性名称,我可以通过使用typeof(Localisation.Resources).GetProperties()访问属性列表,但是,再一次,我不得不使用文字字符串来获取属性名称,而不是使用Localisation.Resource.MenuAdminLabel编译器可以验证的东西。

我该怎么做?

这是实现INotifyPropertyChanged时经常遇到的问题。解决方案是使用像

这样的lambda表达式。
MyMethod(() => Localisation.MenuAdminLabel);

代替

MyMethod("MenuAdminLabel");

并分析表达式。在这个答案中可以找到一个示例实现。对于您的情况,它可能看起来像:

private void MyMethod<TValue>(Expression<Func<TValue>> propertySelector)
{
    var memberExpression = propertySelector.Body as MemberExpression;
    if (memberExpression == null)
        throw new ArgumentException();
    string name = memberExpression.Member.Name;
    // Do stuff with name
}

相关内容

  • 没有找到相关文章

最新更新