C# - Silverlight中.NET ArrayList.ToArray(Type)的替换

时间:2010-11-05 16:06:48

标签: c# silverlight arraylist

下面是我编写的一个简单方法(非常简化,因此我希望它仍然可以得到jist),用于在字符串中获取数组元素的字符串表示形式,并将它们转换为这些值的实际数组。 t是数组的类型。

DeserializeArray(string sArrayElements, out Array aValues, Type t)
{
    string[] sValues = ProcessArrayElements(sArrayAsString);
    ArrayList alValues = new ArrayList(sValues.Length);
    for(int i = 0; i < sValues.Length; ++i)
        alValues.Add(ProcessValue(sValues[ i ] ));
    aValues = alValues.ToArray(t.GetElementType());
    return true;
}

然后我会将此方法与下面的代码一起使用。 propertyInfo是对象的属性,在本例中为.IsArray()== true。 sArrayElements只是包含数组字符串表示形式的字符串(“val1,val2,...,valN”)

Array aValues;
if (DeserializeArray(sArrayElements, out aValues, propertyInfo.PropertyType))
    propertyInfo.SetValue(oObject, aValues, null);
else
    throw new FormatException("Unable to parse Array Elements: " + sArrayElements);

这在.NET中运行得很漂亮,但在Silverlight中却没有,因为ArrayList对象被标记为Internal或者其他东西(因为访问级别等等而无法使用类型)。

所以我正在寻找ArrayList.ToArray(Type)的替代品。我不能只使用List&lt; object&gt; .ToArray(),因为PropertyInfo.SetValue()调用会试图将object []变成Int32 []等。

我已经尝试在DeserializeArray()方法中执行类似aValues = Array.CreateInstance(t.GetElementType())的操作,但是我不能使用[]来分配值,并且您无法为foreach赋值(obj在对象中。)

然后我尝试将aValues参数更改为通用对象[]数组,但在调用Array.CreateInstance()时,我在运行时获得了相同的转换(装箱/拆箱)错误。

是的,是的我正在尝试为Silverlight 4找到解决此问题的方法。任何帮助都将非常感谢:)

  • 詹姆斯

1 个答案:

答案 0 :(得分:4)

未经测试,但我认为这应该做你想要的:

DeserializeArray(string sArrayElements, out Array aValues, Type t) 
{ 
    string[] sValues = ProcessArrayElements(sArrayAsString); 
    aValues = new Array[sValues.Length];
    for(int i = 0; i < sValues.Length; ++i) 
        aValues.SetValue(Activator.CreateInstance(t,ProcessValue(sValues[i])),i); 

    return true; 
}