获取扩展方法中第一个参数的名称
本文关键字:参数 第一个 扩展 方法 获取 | 更新日期: 2023-09-27 18:17:02
string thing = "etc";
thing = thing.GetName();
//now thing == "thing"
这可能吗?
public static string GetName(this object obj)
{
return ... POOF! //should == "thing"
}
我同意@Reed的回答。然而,如果你真的想实现这个功能,你可以这样做:
string thing = "etc";
thing = new{thing}.GetName();
GetName
扩展方法将简单地使用反射从匿名对象中获取第一个属性的名称。
唯一的其他方法是使用Lambda表达式,但代码肯定会复杂得多。
No。在你使用它的时候,"name"应该是"obj"——这可以通过MethodBase.GetCurrentMethod(). getparameters ()[0]. name .
但是,您不能从调用方法中检索变量名。
如果您需要在扩展方法中使用原始变量名,我认为最好这样做:
thing.DoSomething(nameof(thing));
public static string DoSomething(this object obj, string name) {
// name == "thing"
}
c# 6中的新功能是nameof()
,它将完全取代扩展方法。
与此相关的是if (x == null) throw new ArgumentNullException(nameof(x)); WriteLine(nameof(person.Address.ZipCode)); // prints "ZipCode”
CallerMemberAttribute
,它将获得调用函数的方法的名称。两种方法的一个有用的比较,与PropertyChanged
事件有关的例子,还讨论了生成的IL代码(TL;DR:它们是相同的)。