使用Resharper

时间:2017-03-11 03:00:20

标签: c# .net attributes 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”后,我只获得nullnew的建议。 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。

1 个答案:

答案 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);
    }
}