2

如何使用表达式和/或反射获取常量名称?

我写了下面但“我”总是空的?

 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);
4

2 回答 2

0

您不能在反射助手中使用 const 字段,因为 lambda 表达式的主体是 aConstantExpression而不是 a MemberExpression。代替

 public const string CampaignManager = "This_CAMPAIGN_MANAGER";

 public static string CampaignManager = "This_CAMPAIGN_MANAGER";
于 2013-10-03T14:17:07.293 回答
0

似乎您无法获得常量名称,因为

ReflectionHelper.GetPropertyName(() => Test1.CampaignManager);

转变为

ReflectionHelper.GetPropertyName(() => "This_CAMPAIGN_MANAGER");

通过编译器

于 2013-10-03T14:21:35.193 回答