如何修复CA1000不要在泛型类型上声明静态成员

时间:2018-11-23 15:37:19

标签: c# .net-core

我正在使用Microsoft.CodeAnalysis.FxCopAnalyzers,而CA1000规则则说明以下内容。

  

请勿在泛型类型上声明静态成员。

如何解决违规行为

  

要解决违反此规则的问题,请删除静态成员或将其更改为实例成员。

何时禁止显示警告

  

请勿根据此规则禁止警告。以易于理解和使用的语法提供泛型可以减少学习所需的时间,并提高新库的采用率。

我的代码如下。 Success方法是触发规则的方法。

public class ResultResponse
{
    internal ResultResponse(bool isSuccess)
    {
        IsSuccess = isSuccess;
    }

    public bool IsSuccess { get; }

    public static ResultResponse Failed()
        => new ResultResponse(false);
}

public class ResultResponse<T> : ResultResponse
{
    internal ResultResponse(T value, bool isSuccess)
        : base(isSuccess)
    {
        Value = value;
    }

    public T Value { get; }

    public static ResultResponse<T> Success(T value)
        => new ResultResponse<T>(value, true);
}

在上面的示例中,我可以公开构造函数并使用它,但是我也想将构造函数保留在内部,以确保正确使用类型。

Success方法移动到非泛型类型是正确的方法吗?

public class ResultResponse
{
    internal ResultResponse(bool isSuccess)
    {
        IsSuccess = isSuccess;
    }

    public bool IsSuccess { get; }

    public static ResultResponse Failed()
        => new ResultResponse(false);

    public static ResultResponse<T> Success<T>(T value)
        => new ResultResponse<T>(value, true);
}

public class ResultResponse<T> : ResultResponse
{
    internal ResultResponse(T value, bool isSuccess)
        : base(isSuccess)
    {
        Value = value;
    }

    public T Value { get; }
}

1 个答案:

答案 0 :(得分:2)

  

Success方法移动到非泛型类型是正确的方法吗?

这是一个体面的方法。请注意,现在您可以致电:

ResultResponse.Success(someat);

然后编译器将从someat推断出通用类型。在您之前的代码中,由于您是在泛型中调用static方法,因此您总是 必须(“冗余”)指定类型参数:

ResultResponse<int>.Success(someat);