我有一个分配给var data
的通用列表。此列表的类型取决于以前的代码,我需要从控制器返回泛型类型。似乎我不能拥有take a generic List的外部方法。
List<T> data = await queriedItems
.Project(x => Mapper.Map<BsonDocument, T>(x)).ToListAsync();
if (data.GetType() == typeof(List<SomeClass>))
{
data = someHelper.HelperMethodChangeData(data);
}
我该如何处理?我正在考虑创建一个新的List<SomeClass>
var,然后以某种方式将它转换为data
到该类,将特定类型的List类型传递给我的方法,然后将其转换回泛型,如果是&# 39;甚至可能。我不认为这很重要,但帮助者只需要列表中的一部分项目。
编辑 - 添加辅助签名尝试采用泛型:
public List<T> HelperMethodSignature<T>(List<T> itemsList)
编辑 - 以及下面的原始助手签名:
public List<someClass> HelperMethodSignature(List<someClass> itemsList)
我排除了一堆不相关的参数。
答案 0 :(得分:1)
好像你正在寻找一个简单的演员。
假设辅助方法是
public List<SomeClass> HelperMethodChangeData(List<SomeClass> data)
然后你可以这样称呼它
if (data is List<SomeClass>)
{
data = (List<T>)someHelper.HelperMethodChangeData((List<SomeClass>)data);
}
答案 1 :(得分:1)
答案是你不这样做。通用方法中的代码不应该关心T实际上是什么类型。调用者知道T实际上是什么类型,因此将该责任推回调用者以处理任何进一步的类型特定更改。
最干净的方法是从方法中返回List<T>
并让调用者在调用它之后执行所需的任何其他操作。
假设这是不可能的,您可能只想让调用者参与处理修改的委托。
public void ChangeList<T>(Action<List<T>> modifyList)
{
var data = // get your data
modifyList(data);
// Do some more stuff
}
来电者仍然保留这一责任。
ChangeList<SomeClass>(data => /* do something with your List<SomeClass> */)