重构此通用方法以满足SonarQube S4018的最佳方法是什么

时间:2019-12-19 17:54:45

标签: c# asp.net asp.net-core sonarqube

SonarQube规则S4018需要通用方法来提供通用类型作为参数。

例如,这将是非法的,因为T没有作为方法参数传递:

public T DoStuff<T>(string json)
{
    return someResult.ToObject<T>();
}

// call the method
var result = myClass.DoStuff<SomeObject>("some json");

这是违规文本:“重构此方法以使其参数与所有类型参数匹配”

这是规则文档的链接:https://next.sonarqube.com/sonarqube/coding_rules?open=csharpsquid%3AS4018&rule_key=csharpsquid%3AS4018

有没有让我只是不知道的有效方法?这条规则是否有效?文档中的示例仅使用void类型的方法,而我想要一个通用的返回类型。

1 个答案:

答案 0 :(得分:1)

对此系统一无所知,但似乎抱怨T没有出现在“参数”列表中。我不确定这是否是合理的警告。将T用作参数的唯一git pull函数是加函数。将T仅用于返回类型-甚至根本不使用任何其他内容,一切都可以很好地工作。

如果由具有数十年经验的人编写的现有泛型类违反规则,则可能是愚蠢的规则。如果您确实需要遵循此规则,可以使用ref或out参数,而不是创建自己的实例并返回,