var关键字猜测VS 2013

Per*_*kie 2 c# var visual-studio

这段代码工作正常:

Process v = Process.GetProcessById(6752); // firefox 
Console.WriteLine(v);
ProcessThreadCollection th = v.Threads;
foreach (ProcessThread pt in th)
{
    var info = string.Format("-> Thread ID: {0}\tStart Time: {1}\tPriority: {2}",
        pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel);
    Console.WriteLine(info);
}
Run Code Online (Sandbox Code Playgroud)

但是不要工作这个:

Process v = Process.GetProcessById(6752); // firefox 
Console.WriteLine(v);
ProcessThreadCollection th = v.Threads;
foreach (var pt in th)  // var instead of ProcessThread
{
    var info = string.Format("-> Thread ID: {0}\tStart Time: {1}\tPriority: {2}",
        pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel);
    Console.WriteLine(info);
}
Run Code Online (Sandbox Code Playgroud)

pt在第二个假定为object编译器,当然不编译.

为什么假定的元素ProcessThreadCollection作为object代替ProcessThread由编译器?

Ser*_*rvy 9

Process.Threads是一个IEnumerable,而不是一个IEnumerable<ProcessThread>.第一个代码段中的代码将转换为IEnumerableto中的每个对象ProcessThread.第二个代码段中的代码根本没有转换代码,而是使用对象的实际类型,即object.