【发布时间】:2015-11-02 20:08:05
【问题描述】:
我做错了,因为在循环执行后 myData 仍然包含具有空白 id 的对象。为什么 myData 对象没有在以下 foreach 循环中更新,我该如何解决?
我认为可能是我没有通过引用传递对象,而是添加了一个 ref 关键字,并且还移动到了 main 方法,但我仍然显示对象没有被更新。
其他信息
foreach 循环中的用户对象正在更新,但 myData 列表并未反映我看到的应用于用户对象的更新。
** 解决方案 ** 我不是在创建一个 List 而是一个 Enumerable ,每次我在 foreach 列表中通过 myData 时,它都会拉动 json。添加 ToList() 解决了我的问题。
public class MyData
{
public string ID { get; set; }
public Dictionary<string, string> Properties { get; set; }
}
int index = 0;
// Does not allow me to up, creates an IEnumerable
//IEnumerable<MyData> myData = JObject.Parse(json)["Users"]
// .Select(x => new MyData()
// {
// ID = x["id"].ToString(),
// Properties = x.OfType<JProperty>()
// .ToDictionary(y => y.Name, y => y.Value.ToString())
// });
//Works allows me to update the resulting list.
IEnumerable<MyData> myData = JObject.Parse(json)["Users"]
.Select(x => new MyData()
{
ID = x["id"].ToString(),
Properties = x.OfType<JProperty>()
.ToDictionary(y => y.Name, y => y.Value.ToString())
}).ToList();
foreach (var user in myData) // Also tried myData.ToList()
{
if (string.IsNullOrEmpty(user.ID))
{
user.ID = index.ToString();
user.Properties["id"] = index.ToString();
}
index++;
}
【问题讨论】:
-
您是否尝试过改用
if (string.IsNullOrEmpty(user.ID))?您确定 ID 不为空(而不是空)吗? -
myData是 linq 查询的结果吗?如果是这样,它将在每次遍历序列时重新创建。 -
这看起来像是一个用于...基本调试的工具。
-
您的示例代码中似乎缺少某些内容。据我们所知,myData 没有填充任何内容。
-
显示设置
myData的代码。就目前而言,您显示的代码甚至不应该编译。