C# nameof()参数的{CallerMemberName}类功能
我正在编写更多的库代码,遇到了一个麻烦-下面是一个例子C# nameof()参数的{CallerMemberName}类功能,c#,.net,attributes,method-signature,C#,.net,Attributes,Method Signature,我正在编写更多的库代码,遇到了一个麻烦-下面是一个例子 public static TParam RequiredParam<TParam>(TParam param, string name) where TParam : class { return param ?? throw new ArgumentNullException(name); } private readonly int _testInt; public TestClass(int testInt)
public static TParam RequiredParam<TParam>(TParam param, string name) where TParam : class
{
return param ?? throw new ArgumentNullException(name);
}
private readonly int _testInt;
public TestClass(int testInt)
{
_testInt = RequiredParam(testInt, nameof(testInt));
}
有没有人知道类似的方法可以达到同样的效果?考虑到这个库被调用的频率,我不介意进入构建后的步骤,但出于性能原因,我更愿意避免反射
编辑-使我的目标更清晰首先,我个人无论如何都不会这么做,你在另一种方法后面隐藏了逻辑,以保存几个击键。在这样做的过程中,对于新读者,他们将不得不点击查看它的功能,而您仍然必须使用nameof 你也许可以用反射来做一些事情,但即使这样,也会有很多工作要做 我能推荐第三种方法吗 为什么不为关键字args[tab]创建一个重竖琴模板呢 好处是 新读者可以很容易地看到发生了什么。 您只有最少的按键笔划,因为它会在几个字母后提示类型 您可以节省一点IL和对堆栈的调用 如果您使用Resharper,请查看 我想你也可以用一个表达 范例
但在我看来,没有什么真正的收获老实说,我没有完全实现您想要实现的目标。这意味着您将有一种不同的方法来检查引用类型和值类型。我认为出于可读性原因,您应该使用相同的命令。@SeM-我想将调用从-RequiredParamtestInt,nameoftestInt;-to-要求的参数测试;但仍将变量的名称记录在exception@Xsjado如果你能做到这一点,我们一开始就不必使用nameof,哪一个注意事项只是CYou后来的一个补充,你可以-很好地-使用表达式RequiredParam=>testInt-read不会像这样使用Resharper强迫任何使用我的库的人也使用Resharper?@Xsjado在第二种情况下是的
public static TParam RequiredParam<TParam>(TParam param) where TParam : class
{
return param ?? throw new ArgumentNullException(*NAME STILL GETS HERE SOMEHOW*);
}
private readonly int _testInt;
public TestClass(int testInt)
{
_testInt = RequiredParam(testInt);
}
private void PropertyChanged([CallerMemberName]string name = default)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
$NAME$ = $NAME$ ?? throw new ArgumentNullException(nameof($NAME$));
public void ExampleFunction(Expression<Func<string, string>> f) {
Console.WriteLine((f.Body as MemberExpression).Member.Name);
}
ExampleFunction(x => WhatIsMyName);