[英]Invalid Cast when using Reflection SetValue
我一直在使用以下代碼使用Relection設置類屬性
MyClasss c = new MyClass(id);
prop = c.GetType().GetProperty(field);
prop.SetValue(c, Convert.ChangeType(value, prop.PropertyType), null);
該值取自DataGridView並由CellEndEdit事件觸發,因此用戶輸入的值可以是大量屬性和類型中的任何一個。
有時Convert.ChangeType可以成功運行,但有時我會收到Invalid Cast錯誤。
例如,如果屬性類型是(十進制?)[可為空的十進制]我得到錯誤。
[編輯]
作為我正在做的事情的更多背景,DataGridView包含有關用戶對SQL Server中的數據所做的最新更改的信息。 它包含一個更改列表,顯示表,字段,新值和舊值以及進行更改的人員和詳細信息。 如果經理不同意其中一項更改,則可以選擇“還原”。 因此,當選擇列表中的項目時,我的代碼需要查找相應的表和字段,並將當前值設置回存儲的舊值。 它是一個審計控制工具,客戶特別希望將其作為DataGrid。
問題是由於數據網格上顯示的字段數量,數據類型可能是任何東西,直到運行時才知道。 老實說,我不知道如何在這些情況下使用DataBinding,但如果有人仍然相信這是一個比Reflection更好的選擇,那么他們可能會指出我正確的方向。
Convert.ChangeType
接受的類型value
必須實現IConvertible
。 很明顯,你正在轉換任意類型,對於那些沒有實現接口的人,你將獲得無效的強制轉換異常。
請參閱: Convert.ChangeType
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.