【发布时间】:2017-03-11 03:00:19
【问题描述】:
我想在方法的参数中添加nameof 的完成建议。
方法:
public static class Ensure
{
/// <summary>
/// throws <see cref="ArgumentException"/> exception if string is null or empty.
/// </summary>
/// <param name="value">string to check its content.</param>
/// <param name="name">name of parameter passed.</param>
public static void StringNotNullOrEmpty(string value, string name)
{
if (string.IsNullOrEmpty(value))
{
throw new ArgumentException("Value cannot be null or empty", name);
}
}
}
当输入Ensure.StringNotNullOrEmpty(testString, <...>) 时,我希望得到nameof(testString) 对<...> 的建议。上面的方法不建议nameof(更糟糕的是,在输入'n'后,我只得到null、new的建议)。 nameof(...) 是必需的,所以我在ArgumentException 中得到了正确的ParamName。
在 Resharper 的网站上,它说 ArgumentNullException 通过使用 InvokerParameterNameAttribute 来使用 nameof 建议(来源:Resharper InvokerParameterNameAttribute)。
尝试: 所以我在我的项目中安装了nuget包:JetBrains.Annotations 10.4.0并更改了方法如下:
public static class Ensure
{
/// <summary>
/// throws <see cref="ArgumentException"/> exception if string is null or empty.
/// </summary>
/// <param name="value">string to check its content.</param>
/// <param name="name">name of parameter passed.</param>
public static void StringNotNullOrEmpty([CanBeNull] string value,
[NotNull] [InvokerParameterName] string name)
{
if (string.IsNullOrEmpty(value))
{
throw new ArgumentException("Value cannot be null or empty", name);
}
}
}
不幸的是,当我输入Ensure.StringIsNotNullOrEmpty(testString, 时,上述尝试仍然没有给我nameof 的建议。
我发现的其他一些东西是MSDN 上的CallerMemberNameAttribute。但是这只给了我调用方法的名称string。
我还在 GitHub 上查看了一些 repo,但只能以与我尝试相同的方式找到解决方案。
我能想到的一个原因是,当一个方法中有两个 string 参数并在后者上定义了 InvokerParameterNameAttribute 时,Resharper 可能会感到困惑。
是否可以为方法中的参数添加nameof 建议?我怎样才能用上述方法实现这一点?
其他信息: 我有 VS2015 + Resharper 2016.3.2。
【问题讨论】:
标签: c# .net attributes resharper