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

xishuango0o0 2015-12-24 11:13:40
不知道怎么描述,直接上代码吧!

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[] 就会报错,有同学晓得咋个解决不?
...全文
508 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2015-12-24
  • 打赏
  • 举报
回复
使用匿名就好了

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();
        }
  • 打赏
  • 举报
回复
你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变
正怒月神 2015-12-24
  • 打赏
  • 举报
回复
引用 6 楼 xishuango0o0 的回复:
out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。 因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。
之前也有人问过类似的问题, 他采用sqlpara参数放入遇到的问题。 原文是这个:http://bbs.csdn.net/topics/391878891
xishuango0o0 2015-12-24
  • 打赏
  • 举报
回复
out 了, 协变就是自己天天在用的东西...唉,从没注意过这些。 因为是要翻译表达式树传入的参数改成SQL 的 in 子句,只能获取到object类型,看来这个问题无解了。不过谢谢两位的积极回答。
正怒月神 2015-12-24
  • 打赏
  • 举报
回复
引用 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楼说的方法参数。[/quote] 哦,我看你只是为了输出一个字符串,所以以为不需要转换成 object
xishuango0o0 2015-12-24
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
你可以传入泛型,然后就没必要强转了,另外如果是方法传递的参数的话,你可以查下协变逆变
试试看。之前没接触过这种名词...瞬间感觉自己不是个C#程序员了.....
xishuango0o0 2015-12-24
  • 打赏
  • 举报
回复
引用 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楼说的方法参数。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧