对象初始化程序 - 将字段设置为其他字段不能按预期工作,为什么?

时间:2011-09-01 19:42:44

标签: c# linq

我有一些看起来像这样的代码:

List<ListBoxItem> items = (
    from String file in e.Result
    select new ListBoxItem {
        Content = file.Split('\\').Last(),
        Tag = Content,
    }).ToList<ListBoxItem>();

这里,在创建对象之后,结果不等于

List<ListBoxItem> items = (
    from String file in e.Result
    select new ListBoxItem {
        Content = file.Split('\\').Last(),
        Tag = file.Split('\\').Last(),
    }).ToList<ListBoxItem>();

为什么生成的对象初始化不同?

3 个答案:

答案 0 :(得分:7)

除非您在封闭范围内声明Content,否则您的代码甚至不合法。在初始化过程中,您无法引用正在初始化的对象的其他属性。

答案 1 :(得分:5)

Kirk的回答是正确的。但是,我认为你要做的是使用你的代码更加干燥。我想这就是你要做的事情:

List<ListBoxItem> items = (from String file in e.Result
                                       let lastFile = file.Split('\\').Last()
                                       select new ListBoxItem
                                           {
                                               Content = lastFile,
                                               Tag = lastFile
                                           }).ToList<ListBoxItem>();

答案 2 :(得分:4)

在行中:

Tag = Content,

Content没有,AFAIK,与新对象的.Content有关;该表达式在其余代码的上下文中解析。你确定你没有.Content属性/字段吗?即相当于:

var tmp = Content;
select new ListBoxItem
{
    Content = file.Split('\\').Last(),
    Tag = tmp,
}).ToList<ListBoxItem>()