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

下面是我编写的一个简单的方法(非常简化,所以我希望它仍然得到了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只是包含数组的字符串表示forms的字符串(“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 .ToArray(),因为PropertyInfo.SetValue()调用会试图将object []变成Int32 []等。

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

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

是的; 我试图找到Silverlight 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; }