public static void Main()
var result1 = Foo<string>();
Console.WriteLine(result1 ?? "null");
var result2 = FooNotNull<string>();
Console.WriteLine(result2 ?? "null");
public static TResponse? Foo<TResponse>()
var response = Deserialize<TResponse>();
public static TResponse FooNotNull<TResponse>() where TResponse : notnull
var response = Foo<TResponse>();
throw new InvalidOperationException("Response cannot be null");
public static T? Deserialize<T>()