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