C# 运算符'';无法应用于类型为';列表<;双倍>'; double indexvalue=0; var filterValues=列表中的值??值作为列表; 返回(从filterValues中的val选择indexValues++)。ToList();

C# 运算符'';无法应用于类型为';列表<;双倍>'; double indexvalue=0; var filterValues=列表中的值??值作为列表; 返回(从filterValues中的val选择indexValues++)。ToList();,c#,C#,上面说, double indexValues = 0; var filterValues = Values as List<double> ?? Values as List<string>; return (from val in filterValues select indexValues++).ToList(); 运算符“??”不能应用于“List”和“List”类型的操作数 这里的值是IEnumerable,有人能帮我解决这个错误吗?这是。编译器抱

上面说,

double indexValues = 0;    
var filterValues = Values as List<double> ?? Values as List<string>;
return (from val in filterValues select indexValues++).ToList();
运算符“??”不能应用于“List”和“List”类型的操作数
这里的
IEnumerable
,有人能帮我解决这个错误吗?

这是。编译器抱怨这段代码的原因是左侧和右侧站点操作数类型应该是相同的类型。在您的代码中,
列表
列表
是不同的类型


试着告诉我们
is
as
检查或强制转换,并检查它是否为空。

那么您希望
filterValues
是什么类型,记住这必须在编译时确定?使用普通的if-else,并根据它可能列出的输入以及ListNo,忘记一个线性的…filterValues类型。类型在编译时确定。换句话说:如果下一行是
double x=filterValues.First()该编译还是不编译?您确实需要了解编译时已知的信息与执行时可用的信息之间的区别。那么,您的方法声明的返回类型是什么?(感觉您仍然不理解我的观点。变量的类型是在编译时指定的,但似乎您试图使其依赖于执行时信息。)尽管答案没有错;我发现给出的解决方案非常令人不安或不完整,因为你说“用
as
强制转换并检查它是否为null”,这基本上就是他用
as
强制转换所做的,使用null合并操作符(基本上检查null)@Sehnsucht我的意思是用常规if-else单独强制转换。作者给出的代码甚至没有编译,我给出了答案:)我理解你们的意思,但可能不是每个人都会理解;一个简单的示例片段来说明这一点不会有什么坏处。
Operator '??' cannot be applied to operands of type 'List<double>' and 'List<string>'