This question already has answers here:
Reflection - get property name [duplicate]
(2 个回答)
8年前关闭。
我有一个类
在我的
当我进行这样的调用时,我需要
我怎样才能做到这一点?感谢您的时间!
这将工作推送到编译器而不是运行时,并且不管内联、混淆等如何工作。请注意,这需要
如果你的意思是这个例子:
那么直接从该语法中是不可能的;
可以封装为:
IE。
(2 个回答)
8年前关闭。
我有一个类
public class News : Record
{
public News()
{
}
public LocaleValues Name { get; set; }
public LocaleValues Body;
}
在我的
LocaleValues
类中,我有:public class LocaleValues : List<LocalizedText>
{
public string Method
{
get
{
var res = System.Reflection.MethodBase.GetCurrentMethod().Name;
return res;
}
}
}
当我进行这样的调用时,我需要
Method
属性来返回 Name
属性名称的字符串表示:var propName = new News().Name.Method;
我怎样才能做到这一点?感谢您的时间!
最佳答案
如果您真的是指当前的属性(property)(问题标题):
public static string GetCallerName([CallerMemberName] string name = null) {
return name;
}
...
public string Foo {
get {
...
var myName = GetCallerName(); // "Foo"
...
}
set { ... }
}
这将工作推送到编译器而不是运行时,并且不管内联、混淆等如何工作。请注意,这需要
using
、C#5 和 .NET 4.5 或类似的 using System.Runtime.CompilerServices;
指令。如果你的意思是这个例子:
var propName = new News().Name.Method;
那么直接从该语法中是不可能的;
.Name.Method()
会在 .Name
的结果上调用一些东西(可能是一个扩展方法)——但这只是一个.n.other 对象,不知道它来自哪里(例如 Name
属性)。理想情况下,要获得 Name
,表达式树是最简单的方法。Expression<Func<object>> expr = () => new News().Bar;
var name = ((MemberExpression)expr.Body).Member.Name; // "Bar"
可以封装为:
public static string GetMemberName(LambdaExpression lambda)
{
var member = lambda.Body as MemberExpression;
if (member == null) throw new NotSupportedException(
"The final part of the lambda is not a member-expression");
return member.Member.Name;
}
IE。
Expression<Func<object>> expr = () => new News().Bar;
var name = GetMemberName(expr); // "Bar"
关于c# - 如何获取当前属性的名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15333249/
10-17 02:09