【发布时间】:2018-02-23 08:37:21
【问题描述】:
我对@987654322@ 非常陌生,并且对此代码有疑问:
double[] values;
private List<double[]> valueList = new List<double[]>();
void AddNewValues(double d1, double d2, double d3)
{
values[0] = d1;
values[1] = d1;
values[2] = d1;
valueList.Add(values);
}
void GetAllFirstValues()
{
var test = valueList.Where(s => s == typeof(double[0]));
}
如何获取列表中每个数组的第一项?
这可能吗? Linq 是这样做的正确方法还是有更聪明的解决方案?
【问题讨论】:
-
var test = valueList.Where(s => s == typeof(double[0])).FirstOrDefault(); -
为什么是
typeof(double[0])而不是s.First()?为什么要使用typeof?使用valueList.Select(s => s.First()) -
除了
typeof(double[0])是无效语法之外,检查s == typeof(double[])在上面的示例中永远不会为真。s是一个双精度数组值,而typeof(double[])将返回 Type。如果要检查它是否是双数组,则需要s.GetType() == typeof(double[])或模式匹配s is double[]。然而,这在您的代码中是不需要的,因为 List 被键入为 double[]。 -
您的设置代码有很多问题/怪异之处,应该在任何人尝试回答之前解决。 1.你还没有初始化values数组,所以values[0] = d1等语句都会抛出异常。 2. 您将 d1 的值全部分配给数组元素三次,忽略 d2 和 d3(可能不是您的意图)。它可能会帮助您首先添加几个对 AddNewValues() 的调用,这样您就可以看到您的 AddNewValues() 方法有什么问题。