PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_Sharp
[問題]請問有高手可以幫忙解答嗎?關於Type的問題
作者:
bantime
(景)
2015-01-13 16:15:46
private void Test()
{
string[] arrayData = new string["20", "30", "40"];
foreach (var field in Fields)
{
if (field.FieldType.IsArray)
{
var elementType = field.FieldType.GetElementType();
if (elementType.IsValueType)
{
var value = (from tar in arrayData
select (Convert.ChangeType(tar, elementType))).ToArray();
#1 field.SetValue(this, value);
#2 field.SetValue(this, Convert.ChangeType(value, field.FieldType));
}
}
}
}
private FieldInfo[] Fields
{
get
{
return this.GetType().GetFields(System.Reflection.BindingFlags.DeclaredOnly |
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public);
}
}
我現在只知道我的Class裡面有一個實值型別的陣列
但是確切的型別不明
然後Convert.ChangeType(tar, elementType) 可以將tar轉型成我的元素型別
但是傳回來的型別仍然是object 所以我的var value 的型別是object[]
這時候無論用#1 #2的方式去塞值 都會丟出例外
請問我有辦法在不知道型別的狀況下 將 Array生成 然後塞回去Class裡面給該陣列嗎?
另外嘗試過 field.SetValue(this, new int[]{1,2,3}); 且 我的欄位是int[]的時候
可以成功的指定
作者:
ssccg
(23)
2015-01-13 16:29:00
主要在 Convert.ChangeType 回傳type是object你要先寫個generic版的ChangeType,然後用reflection用你的elementType去invoke這個method來轉換
https://ideone.com/3E1TGc
作者:
bantime
(景)
2015-01-13 20:09:00
非常感謝,我再研究一下我跟你的差異
繼續閱讀
[問題] IDE的功能詢問
jacky951
[問題] 新手問..關於Combobox的問題..
alancmh
[問題]3D繪圖
haves560
[問題] socke的問題
cld123
[問題] 傳值/址呼叫的問題
Boom3
[問題] C#程式在別台電腦執行
walter0914
[問題] 再次請教版上前輩
prettywendy
[問題] Kinect2 的開發
srxrrr
Re: [問題] ?: 運算子的問題
VVll
[問題] ?: 運算子的問題
apologize
Links
booklink
Contact Us: admin [ a t ] ucptt.com