通用添加方法

超级JMN

我想创建一种方法,该方法可以将项目添加到在编译时类型未知的集合中它将接收两个对象:集合和项目。

目前,我有这个:

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的“添加”方法

卢卡斯·科弗(LukasKörfer)

我试图通过一些检查来扩展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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章