Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询毫无例外地跳过。为什么?_C#_.net_Linq_Lambda - Fatal编程技术网

C# LINQ查询毫无例外地跳过。为什么?

C# LINQ查询毫无例外地跳过。为什么?,c#,.net,linq,lambda,C#,.net,Linq,Lambda,我有一个将嵌套数组作为参数的方法: Number[][] data 其中Number是从INotifyPropertyChange继承的非常简单的类 然后我有这样一句话: double[] max = (double[])data.Select(crArray => crArray.Select( cr => cr.ValueNorm ).Max()); 当我试图在调试器中查看它时,它只是跳过它,整个方法尽管没有异常弹出 答案是什么?还有更好的方法是什么 当然,我可以使用循环,

我有一个将嵌套数组作为参数的方法:

Number[][] data 
其中Number是从INotifyPropertyChange继承的非常简单的类

然后我有这样一句话:

double[] max = (double[])data.Select(crArray => crArray.Select( cr => cr.ValueNorm ).Max());
当我试图在调试器中查看它时,它只是跳过它,整个方法尽管没有异常弹出

答案是什么?还有更好的方法是什么

当然,我可以使用循环,但它看起来又脏又长。所以LINQ更受欢迎


另外,我使用的是VS2008 SP1,通常这种行为意味着源代码文件不是最新的。尝试从输出目录中删除所有.bin和.pdb文件并重新生成。

是否确定Select方法返回数组?铸造+泛型=代码气味

试试这个:

double[] max = data
  .Select(crArray => crArray.Select( cr => cr.ValueNorm ).Max())
  .ToArray();

转换方法-(ToArray)分配一个新数组并填充它。受方法的限制

向下转换-允许您将引用的类型更改为对象实例。 仅允许实际实例类型,或实例类型继承自的某些类型。其他任何操作都会导致运行时异常

显式转换运算符-使用向下转换的语法,以实现转换效果。这实际上是一种转换方法。对于试图理解铸造的人们来说,这是一个无止境的困惑之源

考虑以下代码:

// reference type is IEnumerable<string>, instance type is string[]
IEnumerable<string> myArray =
  new string[3] { "abc", "def", "ghi" };
// reference type is IEnumerable<string>, instance type is ???
IEnumerable<string> myQuery = myArray
  .Select(s => s.Reverse().ToString());

//Cast - works
string[] result = (string[]) myArray;
//Cast - runtime exception: System.InvalidCastException
result = (string[])myQuery;
//Conversion - works
result = myQuery.ToArray();
//引用类型为IEnumerable,实例类型为string[]
IEnumerable数组=
新字符串[3]{“abc”、“def”、“ghi”};
//引用类型为IEnumerable,实例类型为???
IEnumerable myQuery=myArray
.选择(s=>s.Reverse().ToString());
//铸造厂
字符串[]结果=(字符串[])myArray;
//强制转换-运行时异常:System.InvalidCastException
结果=(字符串[])myQuery;
//转换工程
结果=myQuery.ToArray();

为什么在vs中没有出现运行时异常?我不知道。

你有没有试着遍历max? 我认为这没有抛出,因为您没有遍历请求的结果(Linq),只有在第一次调用GetEnumerator之后才启动请求


ToArray方法遍历请求的可枚举项,并复制数组中的所有内容。我认为这是不同之处。

不,不是。它返回IEnumerable,但我认为casting和ToArray()正在做同样的事情-将IEnumerable转换为数组。您的方法确实有效,但有什么区别?为什么会出现这种奇怪的Visual Studio行为?是的,我真的认为它将使用转换运算符.Thx作为答案)