VS 2015下CS0452错误编译失败

本文关键字:编译 失败 错误 CS0452 2015下 VS | 更新日期: 2023-09-27 18:25:10

我有一些代码可以从字符串表示创建类型化值。此代码处理值类型、类、数组等。

不幸的是,升级到VS 2015后,代码分析在编译时输出此错误:

CS0452类型"T"必须是引用类型,才能将其用作泛型类型或方法"Foo.Bar(string)"中的参数"T"

此错误在VS 2012或2013下没有发生,并且代码已正确编译并工作。

ProfileValue。Value的类型为String。在CreateValue中,T可以是值类型、类等。

呼叫代码:

private static T CreateValue<T>(ProfileValue profileValue)
{
    // setup code
    if (typeof(T) == typeof(String))
    {
        // handle strings specially
    }
    else if (typeof(T).IsArray)
    {
        // handle arrays specially
    }
    else if (typeof(T).IsClass)
    {
        return Foo.Bar<T>(profileValue.Value); // <-- error occurs here
    }
    // additional cases
}

调用的方法签名:

public class Foo
{
    public static T Bar<T>(String value) where T : class, new()
    {
        // do something
    }
}

这通过了VS2013中的代码分析,效果非常好。我能做些什么来解决新的VS 2015代码分析错误?

VS 2015下CS0452错误编译失败

当代码使用动态时,VS 2015下的代码契约似乎失败了。这是由于Roslyn编译器中的更改。

https://github.com/Microsoft/CodeContracts/issues/18