代码之家  ›  专栏  ›  技术社区  ›  NtFreX

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

  •  1
  • NtFreX  · 技术社区  · 7 年前

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

    成功 方法转换为非泛型类型是否正确?

    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 回复  |  直到 7 年前
        1
  •  4
  •   Damien_The_Unbeliever    7 年前

    正在移动 Success 方法转换为非泛型类型是否正确?

    ResultResponse.Success(someat);
    

    编译器将根据 someat . 在以前的代码中,因为您正在调用 static 总是 必须(“冗余地”)指定类型参数:

    ResultResponse<int>.Success(someat);