gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:46:48 24 4
gpt4 key购买 nike

下面是我编写的一个简单方法(非常简化,所以我希望它仍然能理解重点)用于获取字符串中数组元素的字符串表示,并将它们转换为这些值的实际数组。 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 对象被标记为内部或其他东西(不能使用类型,因为访问级别等等等等)。

所以我正在寻找 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;
}

关于C# - 替代 Silverlight 中的 .NET ArrayList.ToArray(Type),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com