重构此通用方法以满足 SonarQube S4018 的最佳方法是什么
What is the best way to refactor this generic method to satisfy SonarQube S4018
SonarQube 规则 S4018 要求泛型方法提供泛型类型作为参数。
例如,这将是非法的,因为 T 没有作为方法参数传入:
public T DoStuff<T>(string json)
{
return someResult.ToObject<T>();
}
// call the method
var result = myClass.DoStuff<SomeObject>("some json");
这是违规文字:"Refactor this method to have parameters matching all the type parameters"
这是规则文档的 link:https://next.sonarqube.com/sonarqube/coding_rules?open=csharpsquid%3AS4018&rule_key=csharpsquid%3AS4018
是否有一种我只是不知道的直接方法来使它有效?这条规则甚至有效吗?文档中的示例仅使用 void 类型的方法,而我想要一个通用的 return 类型。
不知道这个系统,但似乎抱怨 T 没有出现在参数列表中。我不确定这是一个合理的警告。唯一使用 T 作为参数的 List<T>
函数是 Add 函数。 T 仅用于 return 类型时,其他一切都工作得很好 - 甚至根本没有。
如果已有几十年经验的人写的通用类违反了规则,这可能是一个愚蠢的规则。如果你真的需要遵循这个规则,你可以使用 ref 或 out 参数而不是创建你自己的实例和 returning,我猜?
SonarQube 规则 S4018 要求泛型方法提供泛型类型作为参数。
例如,这将是非法的,因为 T 没有作为方法参数传入:
public T DoStuff<T>(string json)
{
return someResult.ToObject<T>();
}
// call the method
var result = myClass.DoStuff<SomeObject>("some json");
这是违规文字:"Refactor this method to have parameters matching all the type parameters"
这是规则文档的 link:https://next.sonarqube.com/sonarqube/coding_rules?open=csharpsquid%3AS4018&rule_key=csharpsquid%3AS4018
是否有一种我只是不知道的直接方法来使它有效?这条规则甚至有效吗?文档中的示例仅使用 void 类型的方法,而我想要一个通用的 return 类型。
不知道这个系统,但似乎抱怨 T 没有出现在参数列表中。我不确定这是一个合理的警告。唯一使用 T 作为参数的 List<T>
函数是 Add 函数。 T 仅用于 return 类型时,其他一切都工作得很好 - 甚至根本没有。
如果已有几十年经验的人写的通用类违反了规则,这可能是一个愚蠢的规则。如果你真的需要遵循这个规则,你可以使用 ref 或 out 参数而不是创建你自己的实例和 returning,我猜?