C# 强制变量求值的静态代码分析

C# 强制变量求值的静态代码分析,c#,visual-studio-2013,resharper,static-analysis,code-inspection,C#,Visual Studio 2013,Resharper,Static Analysis,Code Inspection,我有一个C#解决方案,其中我们使用某种模式。函数无论是否成功都返回true/false,并返回一些值。如果函数返回false,则可能不使用该值。因此,在调用此类函数(具有此特定模式)的范围内,必须计算issucessful布尔值 我们使用VS2013+ReSharper 9。有没有一种方法可以自动检查代码中是否遵循此模式?如果无法使用这些工具,是否还有其他工具?我最后的办法是编写一个单元测试来执行这种静态代码分析 代码示例: public ReturnValue<T> MyMetho

我有一个C#解决方案,其中我们使用某种模式。函数无论是否成功都返回true/false,并返回一些值。如果函数返回false,则可能不使用该值。因此,在调用此类函数(具有此特定模式)的范围内,必须计算
issucessful
布尔值

我们使用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;
    }
}
public ReturnValue MyMethod()
{
尝试
{
....
返回新的ReturnValue(someValue);
}
捕获(例外情况除外)
{
返回新的返回值(ex);
}
}
var returnValue=MyMethod();
如果(!returnValue.Issuccessful)
{
//日志错误
return;//无法继续,上一个函数失败
}
//是否成功继续代码
公共类返回值
{
public bool issusccessful{get;private set;}
公共T值{get;私有集;}
公共返回值(例外情况除外)
{
IsSuccessful=错误;
}
公共返回值(T值返回)
{
IsSuccessful=真;
值=返回的值;
}
}
编辑:


我半解决了我的问题。创建对象后,将保存当前stacktrace(
new stacktrace()
)。销毁对象后(垃圾收集器清理对象时),将检查对象的
IsSuccesful
属性是否在其生命周期内进行过评估。否则,将记录stacktrace警告。

旁注:单元测试不进行静态代码分析,它们完全不同。静态分析实际上并不执行代码。@DmitryGrigoryev我可以编写一个单元测试,它从解决方案中获取所有C#文件并进行分析,而不调用解决方案的任何实际代码。然后,我的单元测试在不执行实际代码的情况下进行静态代码分析。我并不关心宗教所宣扬的单元测试应该如何使用。我使用单元测试的机制对我/项目非常有用。这些不会被称为tunit测试。我不是宗教信仰,只是术语上的一致。你能提供一个具体的代码示例吗?@ulrichb是的,谢谢你的提问。