我研究了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);
}
为什么 foreach 循环中使用的
EventLogEntryCollection
不返回EventLogEntry
?
因为它是旧代码,预泛型。它只实现ICollection
,继承foreach()
循环使用的非泛型IEnumerable.GetEnumerator()
方法。
因此,该枚举器的项类型为object
,并且不包含Message
属性。
但是,如果我将 var 更改为
EventLogEntry
它就会按照我预期的方式使用 for 循环工作。
这正是解决此问题需要做的。
另请参阅在 foreach 循环中无法识别的对象类型。