此程序生成编译器警告CS8620
不能使用类型为‘IEnumerable<;(字符串s1,字符串s2)>;’的参数 对于"IEumable<;(字符串?s1,字符串?s2)"类型的参数‘e’,在 ‘Vid Program.F(IEumable<;(字符串?s1,字符串?s2)>;e)’ 引用类型的可为空性的差异.
但我并没有试图把可以为空的东西伪装成不能为空的东西,我正在做相反的事情!那应该是非常好的!
有没有什么方法可以告诉编译器,"看,我知道它不可能是空的,假装它可以是"?一个与容零运算符相反的运算符?一个不负责任的运营商?!
namespace MyNamespace;
public static class Program
{
public static void Main(string[] args)
{
var L = new [] {new C("S1", "S2")};
F(L);
}
public class C
{
public string S1 { get; }
public string S2 { get; }
public C(string s1, string s2)
{
S1 = s1;
S2 = s2;
}
}
public static void F(IEnumerable<C> e)
=> F(e.Select(c => (c.S1, c.S2)));
public static void F(IEnumerable<(string? s1, string? s2)> e)
{}
}