C#,VS 2010。有人请解释一下为什么我不能使用var
在我下面的代码中!
var props = TypeDescriptor.GetProperties(adapter);
// error CS1061: 'object' does not contain a definition for 'DisplayName'
foreach (var prop in props)
{
string name = prop.DisplayName;
}
// No error
foreach (PropertyDescriptor prop in props)
{
string name = prop.DisplayName;
}
TypeDescriptor.GetProperties
返回一个PropertyDescriptorCollection
与实例PropertyDescriptor
。为什么编译器看不到这个?
TypeDescriptor.GetProperties
返回一个只有一个类GetEnumerator返回非泛型的实现IEnumerator
。其类型Current财产是object
- 这是编译器可以推断的唯一类型,所以这就是你的类型prop
变量将是。
第二foreach
使用PropertyDescriptor
代替var
作为类型prop
实际上执行了一个转换object
to PropertyDescriptor
.
假设这段代码:
PropertyDescriptor x = // get from somewhere;
object o = x;
PropertyDescriptor y = (PropertyDescriptor)o;
同样的情况也发生在第二个foreach
循环每个项目。
你可以添加一个Cast<PropertyDescriptor>()
得到一个通用的IEnumerable<T>
与实施GetEnumerator
返回IEnumerator<T>
。如果您这样做,您可以使用var
in the foreach
loop:
var props = TypeDescriptor.GetProperties(adapter).Cast<PropertyDescriptor>();
// No error
foreach (var prop in props)
{
string name = prop.DisplayName;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)