【发布时间】:2019-12-11 11:47:36
【问题描述】:
我想编写一个通用函数,循环遍历几个不同的对象,这些对象有一个共同的字段。我想在所有对象上更改此字段。
但是,我需要通用函数中每个对象的类型。
我的代码如下所示:
UpdateObjects<objectType>(IMyCollection collection) {
foreach (objectType obj in collection)
{
var correctlyTypedObject = (objectType)obj.MakeEditable();
// Do stuff with correctlyTypedObject
}
}
MakeEditable() 改变了 obj 的类型,所以我需要将它转换回来。
有没有办法做到这一点?
我调用函数如下:
UpdateObjects<userObject>(collection);
由于我使用userObject 类型调用函数,我认为您可以使用该类型在函数本身内转换对象。这个假设正确吗?
【问题讨论】:
-
既然可以拥有
ICollection<YourType>的类型化集合,为什么还要使用ICollection? -
铸造是在编译时。当您在编译时不知道确切的类型时,就没有办法做到这一点。顺便说一句:您的循环已经进行强制转换,无需再次进行。
-
ICollection 是一个自制的集合类型,与任何现有的 ICollection 无关。甚至不知道那是一回事。
-
这不是重点。问题是:你在编译时知道
objectType吗?否则就没有泛型的用处。 -
好吧,这引出了一个问题:你为什么要制作自己的收藏类型?它们已经存在于框架中是有原因的。