簡體   English   中英

無效的轉換異常從smallint轉換為Int32時?

[英]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 ,並且轉換失敗。

即使從shortint? 隱式轉換 int? 確實存在,這里的問題是由於數據讀取器返回一個裝箱的 short ,而您需要進行拆箱轉換 在這種特定情況下,轉換是從object到值類型( int? )的。

符合您情況的段落是引用部分的最后:由於返回的對象是裝箱的short而不是裝箱的int ,因此強制轉換失敗。

作為一個具體的示例,比較以下兩個片段:

short src = 42;
int? dst = (int?)src;

object src = (short)42;
int? dst = (int?)src;

當第一個成功時,第二個拋出InvalidCastException

在您的情況下,不會發生顯式SetValue轉換,但是對SetValue的調用將應用類似的轉換規則,因此會失敗。

總結起來,為了使調用成功,您必須從提取的對象的類型(例如shortshort?選擇在運行時可轉換的屬性的類型short?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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