C# 类型转换问题

标签 c# casting

我有那个代码:

myDataGrid是传递给方法的对象。我知道它是 OvserveableCollection 的类型不同类型的。 我只需要将该对象转换为 OvserveableCollection<T> (它实现了 IEnumerable 接口(interface))

//get element's type
Type entryType = (myDataGrid as IEnumerable).AsQueryable().ElementType; 

foreach (var item in (IEnumerable<entryType>)myDataGrid)
{}

但是编译器不知道 entryType在循环标题中。为什么?

最佳答案

您不能使用运行时 Type实例作为泛型类型参数,除非您使用反射 ( MakeGenericMethod()/MakeGenericType() )。但是我怀疑它是否有帮助!在这种情况下,要么使用非通用 IEnumerable (没有 <T> )API,或者可能转换为已知的接口(interface)/子类,或者使用 dynamic作为最后的手段鸭子打字。

也可以使用MakeGenericMethod()等等,但这更复杂,而且几乎肯定更慢。

例如:

foreach(object item in (IEnumerable)myDataGrid)
{
     // tada!
}

另一个技巧是使用 dynamic调用通用代码:

public void Iterate<T>(IEnumerable<T> data)
{
     foreach(T item in data) {...}
}
...
dynamic evil = myDataGrid;
Iterate(evil);

关于C# 类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571241/

相关文章:

c# - 如何将以字节为单位接收图像的对象转换为实际图像?

c++ - 多重继承后对类布局进行假设是否安全?

c# - 添加具有数据类型属性的新 XElement

c# - 通过 TCP 在 C++ 客户端/C# 服务器之间传输文件

c# - 将 List<T> 绑定(bind)到 DataGridView

c# - 使用 Entity Framework 4.1 - DB First 方法删除/添加自引用 "friend"

postgresql - 将 varbit 转换为 int 的其他方法?还有大金币?

java - 转换引用与使用 new (ArrayList)

c# - 将结构化地址转换为单行,跳过空部分

java - 在java中自动装箱/将Long强制转换为int的更简单方法