我正在尝试显式定义 Anonymous Type 内容,但每次尝试访问数据时都会收到错误:不包含参数的定义或扩展方法。< / em>有人可以向我解释,为什么?
params string[] content;
var log = content.Select(obj => new {
Date = obj.Contains("Date"),
Title = obj.Contains("Title"),
Priority = obj.Contains("Priority"),
Message = obj.Contains("Message")
});
现在,如果我尝试拨打log.Date
特定消息会出现,为什么?我怎么能正确地做到这一点?
答案 0 :(得分:4)
这是因为这里的日志是IEnumerable
。试试这个
var logs = content.Select(obj => new {
Date = obj.Contains("Date"),
Title = obj.Contains("Title"),
Priority = obj.Contains("Priority"),
Message = obj.Contains("Message")
});
foreach (var log in logs)
{
log.Date;
}
要避免foreach
意味着您只需要IEnumerable
中的一个特定项目,如果它是您需要的第一个项目,则可以使用First()
扩展名。
logs.First();
否则,您可以使用通常的索引,就像使用数组一样
答案 1 :(得分:3)
Log是一个可枚举的:
foreach (var o in log) {
bool date = o.Date;
}
答案 2 :(得分:3)
log
是匿名类型的IEnumerable
。所以log
它自己没有Date
成员,但log
中的项目有:
var dateOfFirstItem = log.First().Date;
如果你确定content
中至少有一个项目,你可以这样做:
var log = content.Select(obj => new {
Date = obj.Contains("Date"),
Title = obj.Contains("Title"),
Priority = obj.Contains("Priority"),
Message = obj.Contains("Message")
}).First();
var date = log.Date
var title = log.Title
....
答案 3 :(得分:0)
Select子句返回IEnumerable,因此如果您确定内容对象的选择只返回一个元素,则可以使用SingleOrDefault()函数,如下所示:
var log = content.Select(obj => new {
Date = obj.Contains("Date"),
Title = obj.Contains("Title"),
Priority = obj.Contains("Priority"),
Message = obj.Contains("Message")
}).SingleOrDefault();