0

我有这个 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对象的属性是否在其生命周期内被评估过。如果不是,则会记录带有堆栈跟踪的警告。

4

0 回答 0