C# 对象初始值设定项-将字段设置为其他字段无法按预期工作,为什么?

C# 对象初始值设定项-将字段设置为其他字段无法按预期工作,为什么?,c#,linq,C#,Linq,我有一些代码如下所示: List<ListBoxItem> items = ( from String file in e.Result select new ListBoxItem { Content = file.Split('\\').Last(), Tag = Content, }).ToList<ListBoxItem>(); 在这里,创建对象后,结果与 List<ListBoxItem> i

我有一些代码如下所示:

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>();
为什么生成的对象初始化不同?

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

行:

Tag = Content,
这里的内容与新对象的内容无关;该表达式在代码其余部分的上下文中解析。您确定没有.Content属性/字段吗?i、 e.相当于:

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

柯克的回答是正确的。然而,我认为您要做的是使代码更加枯燥。我想这就是你想要做的:

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

接得好,我不知道他在干什么。初始化的顺序是未指定的,尽管在实践中我相信成员是按照它们在类中声明的顺序初始化的。我确实在别的地方申报过。太棒了,我不知道你能这么做