获取扩展方法中第一个参数的名称

本文关键字:参数 第一个 扩展 方法 获取 | 更新日期: 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:它们是相同的)。