显式转换包含数组的对象 - 到数组

时间:2012-12-13 08:26:25

标签: c# arrays object casting implicit

简短版本 -

是否有简单方法来获取包含未知数组实例的对象类型的变量(UInt16 [],字符串[等等)并将其视为数组,比如调用String.Join(“,”,obj)来生成逗号分隔的字符串?

琐?我也这么认为。

请考虑以下事项:

object obj = properties.Current.Value;

obj可能包含不同的实例 - 例如一个数组,比如UInt16 [],string []等。

我想将obj视为它的类型,即 - 执行转换为未知类型。在我完成之后,我将能够正常继续,即:

Type objType = obj.GetType();
string output = String.Join(",", (objType)obj);

上述代码当然不起作用(objType unknown)。

这两个都没有:

object[] objArr = (object[])obj;   (Unable to cast exception)

只是要清楚 - 我不是试图将对象转换为数组(它已经是数组的实例),只能将其视为一个。

谢谢。

1 个答案:

答案 0 :(得分:9)

假设您正在使用.NET 4(其中string.Join获得更多重载)或稍后有两个简单的选项:

  • 使用动态类型让编译器计算泛型类型参数:

    dynamic obj = properties.Current.Value;
    string output = string.Join(",", obj);
    
  • 转换为IEnumerable,然后使用Cast<object>获取IEnumerable<object>

    IEnumerable obj = (IEnumerable) properties.Current.Value;
    string output = string.Join(",", obj.Cast<object>());