我有一些看起来像这样的代码:
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>();
为什么生成的对象初始化不同?
答案 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>()