使用 Resharper 为参数添加补全建议 'nameof'
Add completion suggestion 'nameof' for parameter with Resharper
我想在方法中的参数中添加 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 上查看了一些回购协议,只能找到与我尝试相同的解决方案。
我能想到的一个原因是,当在一个方法中有两个 string
参数并在后者上定义了 InvokerParameterNameAttribute
时,这可能会让 Resharper 感到困惑。
是否可以为方法中的参数添加 nameof
建议?我怎样才能用上述方法实现这一目标?
附加信息:
我有 VS2015 + Resharper 2016.3.2。
实际上可行(但不是您想要的那样)。它不会在您键入 ,
时立即建议...当您以字符串形式完全键入参数名称而不是使用 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.
}
您可以 submit feedback 在 resharper 上实际实现您想要的行为。
此外,如果您键入 ""
,光标将移动到双引号的中间,并且 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);
}
}
我想在方法中的参数中添加 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 上查看了一些回购协议,只能找到与我尝试相同的解决方案。
我能想到的一个原因是,当在一个方法中有两个 string
参数并在后者上定义了 InvokerParameterNameAttribute
时,这可能会让 Resharper 感到困惑。
是否可以为方法中的参数添加 nameof
建议?我怎样才能用上述方法实现这一目标?
附加信息: 我有 VS2015 + Resharper 2016.3.2。
实际上可行(但不是您想要的那样)。它不会在您键入 ,
时立即建议...当您以字符串形式完全键入参数名称而不是使用 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.
}
您可以 submit feedback 在 resharper 上实际实现您想要的行为。
此外,如果您键入 ""
,光标将移动到双引号的中间,并且 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);
}
}