簡體   English   中英

使用Reflection SetValue時無效的轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM