我正在使用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);
}
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)
将
Success
方法移至非泛型类型是正确的方法吗?
这是一个不错的方法。请注意,现在您可以调用:
ResultResponse.Success(someat);
Run Code Online (Sandbox Code Playgroud)
编译器将从 中推断出泛型类型someat
。static
在之前的代码中,因为您在泛型中调用方法,所以您始终必须(“冗余地”)指定类型参数:
ResultResponse<int>.Success(someat);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2528 次 |
最近记录: |