下面是我寫的一個簡單方法(非常簡化,所以我希望它仍然可以跨越jist)獲取字符串中數組元素的字符串表示形式,並將它們轉換爲這些值的實際數組。 t是數組的類型。C# - 在Silverlight中替換.NET ArrayList.ToArray(Type)
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(類型)。我不能僅僅使用列表<對象> .ToArray(),因爲PropertyInfo.SetValue()調用會嘗試將對象[]設置爲Int32 []或類似內容。我曾嘗試在DeserializeArray()方法做類似aValues = Array.CreateInstance(t.GetElementType())但我不能使用[]來分配值,你不能分配值的foreach() obj在對象中)。
然後,我試着將aValues參數更改爲通用對象[]數組,但在調用Array.CreateInstance()時,運行時出現了相同的轉換(裝箱/取消裝箱)錯誤。
所以是的;我試圖找到一個解決這個問題的Silverlight 4,任何幫助,將不勝感激:)
- 詹姆斯
這引出我的回答,非常感謝!我必須改變'aValues = new Array [sValues.Length]爲aValues = Array.CreateInstance(t.GetElementType(),sValues.Length);在對象,字符串和整數上調用SetValue()沒有問題。謝謝! – James 2010-11-05 16:53:48