C# 任意基础类型数组如何强转 object[] ?

时间:2021-09-10 15:41:29
不知道怎么描述,直接上代码吧!

 object arr = new long[] {100, 1000, 10000};
object arr1 = new string[] {"100", "1000", "10000"};
Console.WriteLine(string.Join(",", (object[])arr));
Console.WriteLine(string.Join(",", (object[])arr1));

第一个Console报错,目的是想让它输出 "100,1000,10000";
这里的arr可能是任意基础类型的数组,可能是string[] 也可能是 int[],所以不能直接使用long[] 来强转.
除了string[],其他类型想要强转成object[] 就会报错,有同学晓得咋个解决不?

7 个解决方案

#1


你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变

#2


使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

#3


引用 2 楼 hanjun0612 的回复:
使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

这个用var声明的其实var只是long[] 的简写而已,并不是object类型,我的应用场景比较符合#1楼说的方法参数。

#4


引用 1 楼 hanjun0612 的回复:
你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变

试试看。之前没接触过这种名词...瞬间感觉自己不是个C#程序员了.....

#5


引用 3 楼 xishuango0o0 的回复:
Quote: 引用 2 楼 hanjun0612 的回复:

使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

这个用var声明的其实var只是long[] 的简写而已,并不是object类型,我的应用场景比较符合#1楼说的方法参数。


哦,我看你只是为了输出一个字符串,所以以为不需要转换成 object

#6


out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。
因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。

#7


引用 6 楼 xishuango0o0 的回复:
out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。
因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。

之前也有人问过类似的问题,
他采用sqlpara参数放入遇到的问题。
原文是这个:http://bbs.csdn.net/topics/391878891

#1


你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变

#2


使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

#3


引用 2 楼 hanjun0612 的回复:
使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

这个用var声明的其实var只是long[] 的简写而已,并不是object类型,我的应用场景比较符合#1楼说的方法参数。

#4


引用 1 楼 hanjun0612 的回复:
你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变

试试看。之前没接触过这种名词...瞬间感觉自己不是个C#程序员了.....

#5


引用 3 楼 xishuango0o0 的回复:
Quote: 引用 2 楼 hanjun0612 的回复:

使用匿名就好了

public static void Main(string[] args)
        {
            var arr1 = new long[] { 100, 1000, 10000 };
            var arr2 = new string[] { "100", "1000", "10000" };
            var q1 = string.Join(",",arr1.Select(x => x.ToString()).ToList());
            var q2 = string.Join(",", arr2.Select(x => x.ToString()).ToList());

            Console.ReadLine();
        }

这个用var声明的其实var只是long[] 的简写而已,并不是object类型,我的应用场景比较符合#1楼说的方法参数。


哦,我看你只是为了输出一个字符串,所以以为不需要转换成 object

#6


out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。
因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。

#7


引用 6 楼 xishuango0o0 的回复:
out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。
因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。

之前也有人问过类似的问题,
他采用sqlpara参数放入遇到的问题。
原文是这个:http://bbs.csdn.net/topics/391878891