为什么C类产品在市场上需求量持续增长?
- 内容介绍
- 文章标签
- 相关推荐
本文共计520个文字,预计阅读时间需要3分钟。
如果这是重复的问题,请直接回应我。否则,请说明这是一个小问题,我会花很长时间解决。为什么在我使用foreach块中的隐式类型循环变量时,我没有获得Intellisense提示?类型提示似乎非常不明显。

我正在使用ReSharper,但是当我将Intellisense切换到VS时,我得到了相同的行为,这并不认为这是罪魁祸首.
编辑:对不起,稍后,但我正在迭代DataTable.Rows,它使用一个无类型的ieterator,正如Marc在下面解释的那样.

这里的一个简单示例是PropertyDescriptorCollection:
var props = TypeDescriptor.GetProperties(obj); foreach(PropertyDescriptor prop in props) {...} // fine
但实际上,PropertDescriptorCollection的枚举器只是IEnumerator,所以Current是对象 – 因此当你使用var时你总是得到对象:
var props = TypeDescriptor.GetProperties(obj); foreach(var prop in props) {...} // prop is "object"
将此与(同样1.1)StringCollection对比;这有一个自定义枚举器(StringEnumerator);所以如果你使用foreach和var,你会得到字符串(而不是对象).
在任何2.0及以上的版本中,期望更好的打字是合理的,原因有两个:
>泛型(对于简单的情况),可以合理地编写强类型集合
>迭代器块(对于非平凡的情况),可以编写自定义迭代器而不会疯狂
但即便如此,仍有一些情况,如果你没有得到你期望的类型;您可以(也可能更清楚地)手动指定类型,或使用Cast< T>()/ OfType< T>().
本文共计520个文字,预计阅读时间需要3分钟。
如果这是重复的问题,请直接回应我。否则,请说明这是一个小问题,我会花很长时间解决。为什么在我使用foreach块中的隐式类型循环变量时,我没有获得Intellisense提示?类型提示似乎非常不明显。

我正在使用ReSharper,但是当我将Intellisense切换到VS时,我得到了相同的行为,这并不认为这是罪魁祸首.
编辑:对不起,稍后,但我正在迭代DataTable.Rows,它使用一个无类型的ieterator,正如Marc在下面解释的那样.

这里的一个简单示例是PropertyDescriptorCollection:
var props = TypeDescriptor.GetProperties(obj); foreach(PropertyDescriptor prop in props) {...} // fine
但实际上,PropertDescriptorCollection的枚举器只是IEnumerator,所以Current是对象 – 因此当你使用var时你总是得到对象:
var props = TypeDescriptor.GetProperties(obj); foreach(var prop in props) {...} // prop is "object"
将此与(同样1.1)StringCollection对比;这有一个自定义枚举器(StringEnumerator);所以如果你使用foreach和var,你会得到字符串(而不是对象).
在任何2.0及以上的版本中,期望更好的打字是合理的,原因有两个:
>泛型(对于简单的情况),可以合理地编写强类型集合
>迭代器块(对于非平凡的情况),可以编写自定义迭代器而不会疯狂
但即便如此,仍有一些情况,如果你没有得到你期望的类型;您可以(也可能更清楚地)手动指定类型,或使用Cast< T>()/ OfType< T>().
