我想在方法中的参数中添加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(...)
是必要的,因此我在ParamName
中获得了正确的ArgumentException
。
在Resharper网站上,ArgumentNullException
使用nameof
(来源:Resharper InvokerParameterNameAttribute)表示InvokerParameterNameAttribute
使用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);
}
}
}
建议。
尝试: 所以我在项目中安装了nuget包:JetBrains.Annotations 10.4.0并更改了方法如下:
nameof
不幸的是,当我输入Ensure.StringIsNotNullOrEmpty(testString,
时,上述尝试仍然没有给我CallerMemberNameAttribute
的建议。
我发现的其他一些事情是MSDN上的string
。但这只给我调用方法的名称string
。
我还在GitHub上查看了一些回购,只能找到与我的尝试相同的解决方案。
我能想到的一个原因是,在后者定义了InvokerParameterNameAttribute
的方法中有两个nameof
参数时,它可能会让Resharper感到困惑。
是否可以在方法中为参数添加getOrCreateQsbBar
建议?我怎样才能通过上述方法实现这一目标?
其他信息: 我有VS2015 + Resharper 2016.3.2。
答案 0 :(得分:1)
实际上有效(但不是你想要的)。只要您键入,
,它就不会建议...当您以字符串形式完全键入参数名称而不是使用nameof表达式时,它只会建议您使用nameof
表达式。
static void Caller(string arg)
{
StringNotNullOrEmpty(arg, "arg"); // only now resharper suggests to use nameof.
StringNotNullOrEmpty(arg, "something else"); // now resharper complains about unknown argument name.
}
你可以在resharper上submit feedback来实际实现你想要的行为。
此外,如果您键入""
,光标将移动到双引号的中间位置,并且resharper会建议可用参数的名称。
顺便说一句,您可以随时评论您的代码,这些代码对每个未来的读者都有用
/// <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);
}
}