我研究了IEnumerable和IEnumerator,关于如何使一个类可用于foreach语句,有很多方法。但这并不能回答我的问题。为什么在foreach循环中使用的EventLogEntryCollection不返回EventLogEntry?但是,如果我将var更改为EventLogEntry,它将按照我期望的for循环方式工作。
EventLog eventLog1 = new EventLog
{
Log = myLogName,
Source = "sourcy"
};
EventLogEntryCollection collection = eventLog1.Entries;
eventLog1.Close();
foreach (var v in collection)
{
Console.WriteLine(v.Message); //object does not contain definition for Message
}
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine("The Message of the EventLog is :"
+ collection[i].Message);
}
答案 0 :(得分:3)
为什么foreach循环中使用的
EventLogEntryCollection
不返回EventLogEntry
?
因为它是旧代码,所以泛型。它merely implements ICollection
继承了foreach()
循环使用的非通用IEnumerable.GetEnumerator()
method。
因此该枚举数的项类型为object
,并且不包含Message
属性。
但是,如果我将var更改为
EventLogEntry
,它将按照我期望的for循环方式工作。
这正是您需要解决的问题。