我使用ReSharper命令行工具中的dupFinder来分析我的代码是否重复。
如果null
- 参数传递给公共方法,我会分别抛出ArgumentNullException
:
public void Foo(MyClass myClass, MyOtherClass myOtherClass)
{
if (myClass == null) throw new ArgumentNullException(nameof(myClass));
if (myOtherClass == null) throw new ArgumentNullException(nameof(myOtherClass));
Console.WriteLine("Foo");
}
public void Bar(MyClass myClass, MyOtherClass myOtherClass)
{
if (myClass == null) throw new ArgumentNullException(nameof(myClass));
if (myOtherClass == null) throw new ArgumentNullException(nameof(myOtherClass));
var whatEver = 23 + 42;
Console.WriteLine("Bar is " + whatEver);
}
不幸的是,dupFinder将带有空检查的行识别为重复... 解决这个问题的一种方法是将这些检查包装在区域中......
#region ExcludeFromDupFinder
if (myClass == null) throw new ArgumentNullException(nameof(myClass));
if (myOtherClass == null) throw new ArgumentNullException(nameof(myOtherClass));
#endregion
...并使用--exclude-code-regions-option
执行dupFinder:
dupfinder.exe c:\MyProjects\MySolution.sln /exclude-code-regions="ExcludeFromDupFinder"
但是......我不太高兴在代码中包含那些不必要的区域,因为它们只是添加噪音并且除了平静dupFinder之外没有任何实际用途......
虽然我认为还有另一种方法可以解决这个问题,但我仍然会问:还有另一种方式(一种更好的)从分析中排除这些空值?
我了解其他dupFinder选项,例如--exclude-by-comment
或--discard-fields
,但这些选项显然还有其他用途。像--discard-null-checks
或--discard-lines-by-pattern="someRegex"
这样的选项会很不错。