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下的代码契约似乎失败了。这是由于Roslyn编译器中的更改。
https://github.com/Microsoft/CodeContracts/issues/18