C#泛型函数如何返回数组?

发布于 2022-09-06 00:55:47 字数 978 浏览 29 评论 0

我想写一个函数,能够判断输入进来的数组类型,然后返回一个数组。
这是函数

public static IList<T> DisorderArray<T>(IList<T> array) 
{
    Type type = typeof(T);
    byte[] keys;
    switch (type.ToString())
    {
        case "System.Int32":
            int[] arr = array as int[];
            keys = new byte[arr.Length];
            Array.Sort(keys, arr);
            return (IList<T>)Convert.ChangeType(arr, typeof(IList<T>));
        case "System.Double":
            //之后都是不同类型的判断
            ...
        default:
            return default(IList<T>);
    }
}

这样调用函数

static void Main(string[] args)
{
    int[] array = { 1, 2, 3, 4, 5 };
    int[] newArray = (int[])DisorderArray<int>(array);
    foreach(int i in newArray)
    {
        Console.WriteLine(i);
    }
}

然后报错:

未经处理的异常: System.InvalidCastException: 对象必须实现 IConvertible。

是我对泛型的理解有问题不应该这样用,还是需要什么约束或者别的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

软糖 2022-09-13 00:55:47
class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 1, 2, 3, 4, 5 };
            double[] arr = { 1, 2, 3, 4, 5 };
            var newArray = DisorderArray(arr);
            foreach (var i in newArray)
            {
                Console.WriteLine(i);
               
            }
            Console.ReadKey();
        }
        public static IList<T> DisorderArray<T>(T[] array) where T:IConvertible
        {
            Type type = typeof(T);
            byte[] keys;
            switch (type.ToString())
            {
                case "System.Int32":
                    int[] arr = array as int[];
                    keys = new byte[arr.Length];
                    Array.Sort(keys, arr);
                    return (IList<T>)Convert.ChangeType(arr,array.GetType());
                case "System.Double":
                    //....
                default:
                    return default(IList<T>);
            }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文