如何使用表达式和/或反射获取常量名称?
Posted
技术标签:
【中文标题】如何使用表达式和/或反射获取常量名称?【英文标题】:How to get a Constant Name using Expressions and/or reflection? 【发布时间】:2013-10-10 06:35:41 【问题描述】:我写了下面的但“我”总是为空?
public static class Test1
public const string CampaignManager = "This_CAMPAIGN_MANAGER";
public static class ReflectionHelper
// <summary>
// Get the name of a static or instance property from a property access lambda.
// </summary>
// <typeparam name="T">Type of the property</typeparam>
// <param name="propertyLambda">lambda expression of the form: '() => Class.Property' or '() => object.Property'</param>
// <returns>The name of the property</returns>
public static string GetPropertyName<T>(Expression<Func<T>> propertyLambda)
var me = propertyLambda.Body as MemberExpression;
if (me == null)
throw new ArgumentException("You must pass a lambda of the form: '() => Class.Property' or '() => object.Property'");
return me.Member.Name;
var campaignManager = ReflectionHelper.GetPropertyName(() => Test1.CampaignManager);
【问题讨论】:
看看this也许能帮上忙。 这就是你需要的:***.com/questions/34304756/… 你传递的是属性的值而不是属性本身 【参考方案1】:您不能在反射助手中使用 const 字段,因为 lambda 表达式的主体是 ConstantExpression
而不是 MemberExpression
。
替换
public const string CampaignManager = "This_CAMPAIGN_MANAGER";
与
public static string CampaignManager = "This_CAMPAIGN_MANAGER";
【讨论】:
但常量应该是常量) @SalientBrain Ups,我的错。那么,我认为这是不可能的。 然而资源是静态的,但经常使用【参考方案2】:似乎你无法获得常量名称,因为
ReflectionHelper.GetPropertyName(() => Test1.CampaignManager);
变成
ReflectionHelper.GetPropertyName(() => "This_CAMPAIGN_MANAGER");
编译器
【讨论】:
以上是关于如何使用表达式和/或反射获取常量名称?的主要内容,如果未能解决你的问题,请参考以下文章
说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?