首页 / C# / c# – 如何获取当前属性的名称
c# – 如何获取当前属性的名称
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何获取当前属性的名称,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1616字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何获取当前属性的名称](/upload/InfoBanner/zyjiaocheng/756/06d9a9bb0a9c48ad841fce051e498735.jpg)
参见英文答案 > Reflection – get property name 2个
我上了课
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;
我怎样才能做到这一点?感谢您的时间!
解决方法:
如果你真的是指当前的财产(问题标题):
public static string GetCallerName([CallerMemberName] string name = null) {
return name;
}
...
public string Foo {
get {
...
var myName = GetCallerName(); // "Foo"
...
}
set { ... }
}
这会将工作推送到编译器而不是运行时,并且无论内联,混淆等都可以工作.请注意,这需要使用System.Runtime.CompilerServices;,C#5和.NET 4.5或类似的using指令.
如果你的意思是这个例子:
var propName = new News().Name.Method;
那么直接来自那个语法是不可能的; .Name.Method()将在.Name的结果上调用某些东西(可能是扩展方法) – 但这只是另一个对象,并且不知道它来自何处(例如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;
}
即
Expression<Func<object>> expr = () => new News().Bar;
var name = GetMemberName(expr); // "Bar"
内容总结
以上是互联网集市为您收集整理的c# – 如何获取当前属性的名称全部内容,希望文章能够帮你解决c# – 如何获取当前属性的名称所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。