[英]Invalid Cast Exception While converting from smallint to Int32?
下面的代碼從DataReader
填充了我的模型的屬性。我使一些屬性為Nullable
,從那時起它就不起作用了。
foreach (var property in _properties)
{
property.SetValue(model, null, null);
if (columnsInDataReader.Contains(property.Name.ToLower()))
{
if (!(_dataReader[property.Name] == DBNull.Value))
property.SetValue(model, _dataReader[property.Name]);
}
}
該屬性是Int32?
並且數據庫smallint
,並且轉換失敗。
即使從short
到int?
隱式轉換 int?
確實存在,這里的問題是由於數據讀取器返回一個裝箱的 short
,而您需要進行拆箱轉換 。 在這種特定情況下,轉換是從object
到值類型( int?
)的。
符合您情況的段落是引用部分的最后:由於返回的對象是裝箱的short
而不是裝箱的int
,因此強制轉換失敗。
作為一個具體的示例,比較以下兩個片段:
short src = 42;
int? dst = (int?)src;
object src = (short)42;
int? dst = (int?)src;
當第一個成功時,第二個拋出InvalidCastException
。
在您的情況下,不會發生顯式SetValue
轉換,但是對SetValue
的調用將應用類似的轉換規則,因此會失敗。
總結起來,為了使調用成功,您必須從提取的對象的類型(例如short
和short?
選擇在運行時可轉換的屬性的類型short?
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.