为什么 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.

这正是您需要做的来解决这个问题。

另见