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由编译器?
Process.Threads是一个IEnumerable,而不是一个IEnumerable<ProcessThread>.第一个代码段中的代码将转换为IEnumerableto中的每个对象ProcessThread.第二个代码段中的代码根本没有转换代码,而是使用对象的实际类型,即object.