gpt4 book ai didi

C# 无法在 IEnumerable 中设置属性

转载 作者:太空狗 更新时间:2023-10-29 20:13:54 25 4
gpt4 key购买 nike

在某些 C# 代码中看到一些我无法解释的奇怪行为。可能是我缺少一点重要的理解,所以希望有人能帮我打开灯。

有一段代码看起来像这样:

    IEnumberable<myObject> objects = GetObjectsFromApiCall();

for (int i = 0; i < objects.Count(); i++)
{
if (String.IsNullOrEmpty(objects.ElementAt(i).SubObject.Title))
{
SubObject sub = GetSubObjectFromDatabase((long)objects.ElementAt(i).SubObject.Id);
if (sub != null)
{
objects.ElementAt(i).SubObject.Title = sub.Title;
}
}
}

当您单步执行它时,这段代码的一切似乎都能正常工作。 “对象”集合按预期填充。 “sub”按收集的方式获取,并具有完整的预期属性集,包括填充的 Title 属性。执行期间不会抛出任何错误。

但是...存在于每个对象中的 SubObject.Title 属性(只有标准的 get;set;代码)顽固地保持为空。

我很迷茫。谁能解释一下这是怎么回事?

编辑:对于那些建议我不应该使用 for 循环和 ElementAt 的人,我从 foreach 循环开始,但认为它可能是问题的根源,因为它每次都获取一个新的 SubObject。现在已修复,感谢您的帮助,并恢复了 ForEach。

干杯,马特

最佳答案

我会这样解决:

var objects = GetObjectsFromApiCall().ToList();

然后你可以保持循环原样(它有效),或者按照其他答案的建议使用 foreach 和一些 Linq 稍微优化它,但这并不重要:问题是你试图改变一个元素this question 中解释的 IEnumerator<>由@Ahmet Kakıcı 指出。

关于C# 无法在 IEnumerable 中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com