c# - 将 IList 转换为 SomeType[]

标签 c# arrays generics runtime

我有一个类型为 List 的集合,我想将其转换为 SomeType[]。 SomeType 在运行前是未知的。

这必须通过以下过程的签名来完成。

private object ConvertListToArray(IList  collection)
{
       // This does not work since SomeType is not known before runtime.
       var convertedList = collection.Cast<SomeType>().ToArray();
        return convertedList;
}

注意collection是IList,但是已知具体类型是

     List<SomeType>

返回的集合必须是 SomeType[] 类型的对象。

如何做到这一点?

最佳答案

public static class ListExtensions
{
    public static T[] ConvertToArray<T>(IList list)
    {
        return list.Cast<T>().ToArray();
    }

    public static object[] ConvertToArrayRuntime(IList list, Type elementType)
    {
        var convertMethod = typeof(ListExtensions).GetMethod("ConvertToArray", BindingFlags.Static | BindingFlags.Public, null, new [] { typeof(IList)}, null);
        var genericMethod = convertMethod.MakeGenericMethod(elementType);
        return (object[])genericMethod.Invoke(null, new object[] {list});
    }

}
[TestFixture]
public class ExtensionTest
{
    [Test]
    public void TestThing()
    {
        IList list = new List<string>();
        list.Add("hello");
        list.Add("world");

        var myArray = ListExtensions.ConvertToArrayRuntime(list, typeof (string));
        Assert.IsTrue(myArray is string[]);
    }
}

关于c# - 将 IList 转换为 SomeType[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313672/

相关文章:

c# - 结合两个正则表达式进行 ASP.NET MVC 数据注释

c# - 远程处理异常 : Object 'xxx.rem' has been disconnected or does not exist at the server

c# - 从下拉列表中选择 Selenium

java - Java中获取数组的总和

scala - 在 Scala 中,泛型类型参数可以与 *function* 定义一起使用吗?

c# - 如何将 Where、Select、OrderBy 等应用于 LinqPad 中存储过程的结果?

arrays - Perl 多维数组访问

Java 泛型返回类型

swift - 有没有办法指定一个只接受两种特定类型之一的通用函数?

javascript - 如何在没有原生javascript join 的情况下手动实现 join 功能?