为什么在EventLogEntryCollection中的foreach var不返回EventLogEntry?

时间:2019-04-15 09:27:42

标签: c# collections system.diagnostics

我研究了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);
        }

1 个答案:

答案 0 :(得分:3)

  

为什么foreach循环中使用的EventLogEntryCollection不返回EventLogEntry

因为它是旧代码,所以泛型。它merely implements ICollection继承了foreach()循环使用的非通用IEnumerable.GetEnumerator() method

因此该枚举数的项类型为object,并且不包含Message属性。

  

但是,如果我将var更改为EventLogEntry,它将按照我期望的for循环方式工作。

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

另请参阅Object type not recognised on foreach loop