为什么 EventLogEntryCollection 中的 foreach var 不返回 EventLogEntry?
Why foreach var in EventLogEntryCollection not returning EventLogEntry?
我研究过 IEnumerable 和 IEnumerator,有很多方法可以使 class 可用于 foreach 语句。但这并不能回答我的问题。为什么foreach循环中使用的EventLogEntryCollection没有returnEventLogEntry?但是,如果我将 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);
}
Why does the EventLogEntryCollection
used in foreach loop not return EventLogEntry
?
因为它是旧代码,前泛型。它 merely implements ICollection
, which inherits the non-generic IEnumerable.GetEnumerator()
method 被你的 foreach()
循环使用。
因此该枚举器的项目类型是 object
,并且不包含 Message
属性.
But if I changed var to EventLogEntry
it works the way I expected using for loop.
这正是您需要做的来解决这个问题。
另见 。
我研究过 IEnumerable 和 IEnumerator,有很多方法可以使 class 可用于 foreach 语句。但这并不能回答我的问题。为什么foreach循环中使用的EventLogEntryCollection没有returnEventLogEntry?但是,如果我将 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);
}
Why does the
EventLogEntryCollection
used in foreach loop not returnEventLogEntry
?
因为它是旧代码,前泛型。它 merely implements ICollection
, which inherits the non-generic IEnumerable.GetEnumerator()
method 被你的 foreach()
循环使用。
因此该枚举器的项目类型是 object
,并且不包含 Message
属性.
But if I changed var to
EventLogEntry
it works the way I expected using for loop.
这正是您需要做的来解决这个问题。
另见