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

NtF*_*reX 6 c# .net-core

我正在使用Microsoft.CodeAnalysis.FxCopAnalyzersCA1000规则如下。

不要在泛型类型上声明静态成员。

如何纠正违规行为

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

何时抑制警告:

不要抑制此规则的警告。以易于理解和使用的语法提供泛型可以减少学习所需的时间并提高新库的采用率。

我的代码如下。该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);
}
Run Code Online (Sandbox Code Playgroud)

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

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

这是一个不错的方法。请注意,现在您可以调用:

ResultResponse.Success(someat);
Run Code Online (Sandbox Code Playgroud)

编译器将从 中推断出泛型类型someatstatic在之前的代码中,因为您在泛型中调用方法,所以您始终必须(“冗余地”)指定类型参数:

ResultResponse<int>.Success(someat);
Run Code Online (Sandbox Code Playgroud)