该IEnumerable接口是协变,但协方差不值类型的工作.将值类型转换为引用类型更改表示 - 需要对值进行装箱,并返回对装箱值的引用.转换引用类型不会更改表示 - 它仍然是引用相同对象的相同引用.
IEnumerable
string是一个IEnumerable,所以它不能被铸造IEnumerable.
string
正如其他答案中所提到的,解决方案是转换为非泛型IEnumerable.
var length = ((IEnumerable) propertyValue).Cast().Count();