我想创建一种方法,该方法可以将项目添加到在编译时类型未知的集合中。它将接收两个对象:集合和项目。
目前,我有这个:
public void Add(object collection, object item)
{
var list = (IList)collection;
list.Add(item);
}
问题?例如,当集合是这种类型的实例时,它将不起作用:
public sealed class ColumnDefinitionCollection : IList<ColumnDefinition>, IEnumerable<ColumnDefinition>
{
}
如何使它与具有Add方法的每种实例一起工作?
编辑:我尝试使用@lukegv提出的方法,但是当集合是一个ColumnDefinitionCollection
(在通用Windows应用程序中运行)时,我正在使用此方法:
我创建了与此问题相关的另一个问题(未检索到“添加”)无法在UWP中获取ColumnDefinitionCollection的“添加”方法
我试图通过一些检查来扩展Zdravko Danevs的答案,以防止出现不希望的行为,例如您和Jon Skeet提到的(DateTime.Add
)。此命令检查collections Add
-method期望的类型是否等于该项目提供的类型。
static void AddToCollection(object collection, object item)
{
MethodInfo addMethod = collection.GetType().GetMethod("Add");
if (addMethod == null || addMethod.GetParameters().Length != 1)
{
// handle your error
return;
}
ParameterInfo parameter = addMethod.GetParameters().First();
if (parameter.ParameterType.Equals(item.GetType()))
{
addMethod.Invoke(collection, new object[] { item });
}
else
{
// handle your error
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句