我有这个 C# 解决方案,我们在其中使用某种模式。一个函数是否成功返回真/假,以及一些值。如果函数返回 false,则该值可能不会被使用。因此,在调用此类函数(具有此特定模式)的范围内,IsSuccessful
必须评估布尔值。
我们使用 VS2013 + ReSharper 9。有没有办法自动检查代码中是否遵循这种模式?如果这些工具无法实现,是否还有其他工具?我最后的手段是编写一个单元测试来执行这个静态代码分析。
代码示例:
public ReturnValue<T> MyMethod()
{
try
{
....
return new ReturnValue<T>(someValue);
}
catch(Exception ex)
{
return new ReturnValue<T>(ex);
}
}
var returnValue = MyMethod();
if(!returnValue.IsSuccesful)
{
//Log error
return; //Can't go on, previous function failed
}
//Is successful continue code
public class ReturnValue<T>
{
public bool IsSuccessful { get; private set; }
public T Value { get; private set; }
public ReturnValue<T>(Exception ex)
{
IsSuccessful = false;
}
public ReturnValue<T>(T valueToReturn)
{
IsSuccessful = true;
Value = valueToReturn;
}
}
编辑:
我半解决了我的问题。在创建对象时,当前的堆栈跟踪被保存(new StackTrace()
)。在对象销毁时(当垃圾收集器清理它时),检查IsSuccesful
对象的属性是否在其生命周期内被评估过。如果不是,则会记录带有堆栈跟踪的警告。