我正在使用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; }
}
答案 0 :(得分:2)
将
Success
方法移动到非泛型类型是正确的方法吗?
这是一个体面的方法。请注意,现在您可以致电:
ResultResponse.Success(someat);
然后编译器将从someat
推断出通用类型。在您之前的代码中,由于您是在泛型中调用static
方法,因此您总是 必须(“冗余”)指定类型参数:
ResultResponse<int>.Success(someat);