我有一个场景,其中一个类加载一种类型的对象,由于抽象化,我不能使用通用类(通用类往往像癌症一样扩散 :),但我经常想在检索到对象后使用通用版本,这导致了像这样的代码(简化):
List<SomeClass> items = Storage.LoadItems(filename).OfType<SomeClass>().ToList();
当LoadItems返回一个List时,我意识到,为什么不改为
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>。