首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过lambda表达式在运行时获取局部变量(和参数)的名称

通过lambda表达式在运行时获取局部变量(和参数)的名称
EN

Stack Overflow用户
提问于 2012-06-16 20:38:25
回答 1查看 4.4K关注 0票数 20

我感兴趣的是在运行时以重构安全的方式检索局部变量(和参数)的名称。我有以下扩展方法:

public static string GetVariableName<T>(Expression<Func<T>> variableAccessExpression)
{
    var memberExpression = variableAccessExpression.Body as MemberExpression;
    return memberExpression.Member.Name;
}

…它返回通过lambda表达式捕获的变量的名称:

static void Main(string[] args)
{
    Console.WriteLine(GetVariableName(() => args));
    // Output: "args"

    int num = 0;
    Console.WriteLine(GetVariableName(() => num));
    // Output: "num"
}

但是,这只会起作用,因为C#编译器会在后台(根据Jon Skeet)将匿名函数中捕获的任何局部变量(和参数)提升为编译器生成的类中具有相同名称的实例变量。如果不是这样,BodyMemberExpression的转换将失败,因为MemberExpression表示字段或属性访问。

这个变量提升是否记录了行为,或者它是可能在框架的其他版本中发生更改的实现细节?

注意:这个问题是对my former one on argument validation的概括。

EN

回答 1

Stack Overflow用户

发布于 2012-06-16 21:15:01

AFAIK,这是一个实现细节。

然而,我认为你可以打赌它实际上不会改变。

我刚刚在VS2012 RC中进行了测试,它和预期的一样工作--所以你至少在几年内是安全的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11063502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档