我有一个场景,一个类加载一种类型的对象,由于抽象我不能使用泛型类(泛型往往像癌症一样传播:)但我经常想使用检索到的对象的泛型版本,结果在这样的代码中(简化):
List<SomeClass> items = Storage.LoadItems(filename).OfType<SomeClass>().ToList();
LoadItems 返回一个 List<object> 的地方,然后我意识到,为什么不改为
public void LoadItems(string filename,IList list);
现在我可以这样做了
List<SomeClass> items = new List<SomeClass>();
LoadItems(filename,items);
哪个应该更有效。它似乎也更灵活一些,因为我可以使用现有的列表并添加新项目。所以我的问题是,这是一种常见的模式还是你有不同/更好的方法来实现这一点?
我也有点好奇你能做到这一点,如果你尝试添加一个错误类型的对象,你会得到一个异常,但这是否意味着泛型列表也会进行类型检查?(这似乎有点不必要)
编辑 修改模式实际上可能更优雅一点
public IList LoadItems(string filename,IList list=null);
这样您就可以流利地使用该语句,如果没有传递任何列表,您可以简单地实例化一个 List<object>