c# - 如何修复 CA1000 不要在泛型类型上声明静态成员
问题描述
我正在使用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; }
}
解决方案
将
Success
方法移动到非泛型类型是正确的方法吗?
这是一个体面的方法。请注意,现在,您可以调用:
ResultResponse.Success(someat);
并且编译器将从someat
. static
在您之前的代码中,因为您在泛型中调用该方法,所以您总是必须(“冗余”)指定类型参数:
ResultResponse<int>.Success(someat);
推荐阅读
- azure-devops - 如何在只知道令牌值的情况下撤销 azure DevOps 令牌?
- python - 如何在不获取 SettingWithCopyWarning 的情况下有效更新数据框的列?
- javascript - nodejs express中默认返回的中间件中的打字稿问题
- sql - 如何查询 SQL Server 代理 - 所有作业的错误消息结果集
- javascript - 如何在reactJS中将图像传递给this.state
- windows - 为什么反引号位置很重要?
- c# - 所有消费者/所有消息类型的公共交通过滤器
- javascript - 当我们刚刚在函数中创建元素时,如何让 setAttribute() 在 javascript 中工作?
- python - 为什么我会收到此错误?太多值无法解包(预期 2)
- node.js - 后端脚本处理图像/视频数据时存储在哪里?