首页 > 解决方案 > 如何修复 CA1000 不要在泛型类型上声明静态成员

问题描述

我正在使用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);
}

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

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; }
}

标签: c#.net-core

解决方案


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

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

ResultResponse.Success(someat);

并且编译器将从someat. static在您之前的代码中,因为您在泛型中调用该方法,所以您总是必须(“冗余”)指定类型参数:

ResultResponse<int>.Success(someat);

推荐阅读