6

短版——

有没有一种简单的方法来获取包含未知数组实例(UInt16[]、string[] 等)的类型对象变量并将其视为数组,例如调用 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)

为了清楚起见-我不是想将对象转换为数组(它已经是数组的一个实例),只是能够将其视为一个。

谢谢你。

4

1 回答 1

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>());
    
于 2012-12-13T08:34:16.353 回答