【发布时间】:2012-10-12 08:13:04
【问题描述】:
我有一个 IList<object>,其中每个对象都是 T 类型的实例(我在编译时不知道)。
我需要一个IList<T>。我不能使用 Cast,因为我在编译时不知道类型,并且没有可以使用的 Cast(Type) 重载。
这是我目前所拥有的:
private object Map(IList<ApiCallContext> bulk)
{
// god-awful way to build a IEnumerable<modelType> list out of Enumerable<object> where object is modelType.
// quoting lead: "think whatever you do it will be ugly"
Type modelType = model.Method.ModelType;
if (bulk.Count > 0)
{
modelType = bulk.First().Parameters.GetType();
}
Type listType = typeof(List<>).MakeGenericType(modelType);
object list = Activator.CreateInstance(listType);
foreach (object value in bulk.Select(r => r.Parameters))
{
((IList)list).Add(value);
}
return list;
}
我在想的是,也许我可以创建一个新的 LooseList 类来实现 IList 并且只处理强制转换,看起来比我目前拥有的更好,但听起来还是太笨拙了。
【问题讨论】:
-
请问这样做的目的是什么?如果您在编译时不知道 T,您将无法以强类型的方式使用您的 IList
,对吧? -
重点是我需要用这个列表提供一个库,它使用泛型来解析列表并写入一个 CSV 文件。
-
你需要喂食的方法是什么样的?任何
T都需要List<T>,还是固定为某个特定值? -
void WriteRecords<T>(IEnumerable<T> rows)。那是无关紧要的。他们尝试使用T构建表达式以获取我类型中的属性;然后爆炸了。
标签: c# linq reflection