CA2263 propose to use generic overload for type, that doesn't satisfy overload's notnull generic type
Steps To Reproduce
public static class TestClass
{
public static T? Test1<T>(ITest1 tester)
{
// bad suggestion
return (T?)tester.Test(typeof(T));
// CS8714: The type 'T' cannot be used as type parameter 'T' in the generic type or method 'ITest.Test<T>()'.Nullability of type argument 'T' doesn't match 'notnull' constraint.
//return tester.Test<T>();
}
public static T? Test2<T>(ITest1 tester)
where T : notnull
{
// good suggestion
//return (T?)tester.Test(typeof(T));
return tester.Test<T>();
}
public static T? Test3<T>(ITest2 tester)
{
// good, no suggestion
return (T?)tester.Test(typeof(T));
//return tester.Test<T>();
}
public static T? Test4<T>(ITest2 tester)
where T : Enum
{
// good suggestion
//return (T?)tester.Test(typeof(T));
return tester.Test<T>();
}
}
public interface ITest1
{
T? Test<T>() where T : notnull;
object? Test(Type type);
}
public interface ITest2
{
T? Test<T>() where T : Enum;
object? Test(Type type);
}
Analyzer
Diagnostic ID: CA2263:
Prefer generic overload when type is known
Analyzer source
NuGet Package: Microsoft.CodeAnalysis.NetAnalyzers
Version: 9.0.0-preview.24122.1
Describe the bug
CA2263 propose to use generic overload for type, that doesn't satisfy overload's
notnull
generic typeSteps To Reproduce
Expected behavior
No errors when generic constrain not satisfied
Actual behavior
Proposed code change trigger compilation error