Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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#UWP填充和访问嵌套列表_C#_List_Object_Uwp_Nested Loops - Fatal编程技术网

C#UWP填充和访问嵌套列表

C#UWP填充和访问嵌套列表,c#,list,object,uwp,nested-loops,C#,List,Object,Uwp,Nested Loops,我正在创建一个存储和显示天气详细信息的应用程序 在这个片段中,result是一个对象列表(40个对象,5天内每天8个天气预报),我将其分为几天和几小时。我使用嵌套列表显示一个天数列表中的小时预测列表(每个sortedDay列表中都有自己的sortedHours列表) 打印输出时,每个对象都有相同的值,并且每次打印后都会调用Debug.WriteLine(“-”);(39次,最多只能调用5次) 第一个问题是,您正在为每个结果条目重用一个单独的sortedHours实例。因为List是一个引用类型,

我正在创建一个存储和显示天气详细信息的应用程序

在这个片段中,
result
是一个对象列表(40个对象,5天内每天8个天气预报),我将其分为几天和几小时。我使用嵌套列表显示一个天数列表中的小时预测列表(每个
sortedDay
列表中都有自己的
sortedHours
列表)

打印输出时,每个对象都有相同的值,并且每次打印后都会调用
Debug.WriteLine(“-”);
(39次,最多只能调用5次)


第一个问题是,您正在为每个结果条目重用一个单独的
sortedHours
实例。因为
List
是一个引用类型,所以变量指向内存中存储数据的位置。因为在每次迭代中,在最后一轮之后,您将
清除
添加到相同的实例中它将只包含列表中的最后一项

第二个问题是输入中的最后一项没有被处理,因为
foreach
将结束,
sortedHours
列表将包含一些尚未分配到任何日期的项

最后,在日期比较中存在问题:

Convert.ToDateTime(result.list[counter].dt_txt) > prevDate
这不只是比较日期。它比较日期和时间。这意味着每次都会执行if。要仅比较日期,您必须将日期的时间部分置为空,这可以通过使用
日期
属性轻松完成:

Convert.ToDateTime(result.list[counter].dt_txt).Date > prevDate.Date

第一个问题是,您正在为每个结果条目重用一个单独的
sortedHours
实例。因为
List
是一个引用类型,所以变量指向内存中存储数据的位置。因为在每次迭代中,在最后一轮之后,您将
清除
添加到相同的实例中它将只包含列表中的最后一项

第二个问题是输入中的最后一项没有被处理,因为
foreach
将结束,
sortedHours
列表将包含一些尚未分配到任何日期的项

最后,在日期比较中存在问题:

Convert.ToDateTime(result.list[counter].dt_txt) > prevDate
这不只是比较日期。它比较日期和时间。这意味着每次都会执行if。要仅比较日期,您必须将日期的时间部分置为空,这可以通过使用
日期
属性轻松完成:

Convert.ToDateTime(result.list[counter].dt_txt).Date > prevDate.Date


为什么您要使用
foreach
而不使用
wCount
(或
sd
,或
sh
)?您也可以只使用
进行
循环…因为数据是从api读取的,因此大小可能会发生变化,而且wCount是一个对象而不是整数值,也将被拆分为单独的方法。我知道,我的观点是您可以使用
wCount
而不是
结果。列表[计数器]
。大小为
result.list.Length
(或
.Count()
),对吗…?哦,对了,我不觉得这是个问题,因为当我调试它时,它从
result
中获取正确的值,并将它们正确地分配给
wController
,但问题似乎是当它被添加到列表中时,它只是为了使代码更易于阅读而需要考虑的事情。为什么要使用
foreach
然后不使用
wCount
(或
sd
,或
sh
)?您也可以只使用
进行
循环…因为数据是从api读取的,因此大小可能会发生变化,而且wCount是一个对象而不是整数值,也将被拆分为单独的方法。我知道,我的观点是您可以使用
wCount
而不是
结果。列表[计数器]
。大小为
result.list.Length
(或
.Count()
),对吗…?哦,对了,我觉得这不是问题所在,因为当我调试时,它从
结果中获取正确的值,并将它们正确地分配给
wController
,但问题似乎是当它添加到列表中时。对了,这只是为了使代码更易于阅读而需要考虑的事情。我明白,这是有意义的现在,我可以调整它,每次创建一个新的
wController
实例,但对于创建一个新的
sortedHours
列表,我无法理解如何将其实现为一个新列表?基本上,当您调用
Add(sortedHours)时
,您将指向内存位置的指针添加到
sortedDays
列表中。在下一行,您调用clear
sortedHours
——这基本上清除了变量,但由于
sortedDays
列表中的项指向同一个变量,它现在基本上指向一个空集合。您可以看到这一点ll如果您在
清除
行之后放置一个断点-如果您将鼠标悬停在
sortedDays
变量上并研究添加的项,您将看到它突然变为空-这是因为它与
sortedHours
:-)的实例相同。解决方法是执行
sortedHours=new List()
而不是
清除
。这将创建一个新实例,并保留已使用的实例。作为类比,假设您有一个指向硬盘上文件的快捷方式。如果您修改了文件的内容,更改也会反映在快捷方式中,因为它指向同一个文件。问题已解决,知识已获得感谢您提供的所有帮助OK,我现在明白了,我可以调整它,每次创建一个新的
wController
实例,但对于创建一个新的
sortedHours
列表,我无法理解如何将其实现为一个新列表?基本上,当你调用
Add(sortedHours)
时,你会向
sortedHours
列表添加一个指向内存位置的指针。就在下一个