0

データ列から整数リストを返しています。この特定の列は(int、null)です。しかし、私は例外を得ました。

Specified cast is not valid.

コード:

public List <int> GetSortOrder(DataTable dt,string columnName)
{
    List<int> Orders = new List<int>();
    foreach (DataRow row in dt.Rows)
    {
        Orders.Add((int)row[columnName]);
    }
    return Orders;
}

私が欲しいのは、それがnullの場合、それを0として強制することです。null許容型intを使用する必要がありますか?または単にif...else ...を使用しますか?

4

5 に答える 5

6
        Orders.Add((int)(row[columnName] ?? 0));
于 2012-08-02T13:56:04.960 に答える
3

この列には、通常のC#nullではなくDBNull.Valueが実際に格納されます。だからオペレーター?? 動かない。列がnullかどうかを確認するには、row.IsNullメソッドを使用します。

Orders.Add(row.IsNull(columnName) ? 0 : (int)row[columnName]);

オペレーター?? DBNullsでは機能しません。

次のリンクも確認してください。DBNull対応のintをintに変換する効率的な例については、C#でDBNullを処理してください。

于 2012-08-02T14:17:07.667 に答える
1

私もintを使用しますか?私はFieldメソッドが好きです:

int? myInt = row.Field<int?>(columnName);
于 2012-08-02T15:31:23.317 に答える
0

私は提案しint?ます:

Orders.Add(((int?)row[columnName]).GetValueOrDefault());

私の意見では、それは意図とコードを明確かつ簡潔に保ちますが、if/elseはそれほどうまくいきません。他の答えが示唆しているように使用?? 0することも良いです。

于 2012-08-02T13:56:29.267 に答える
0

それはうまくいくはずです:

public List <int> GetSortOrder(DataTable dt,string columnName)
{
    List<int> Orders = new List<int>();
    int? nullableInt;
    foreach (DataRow row in dt.Rows)
    {
        nullableInt = (int)row[columnName];
        Orders.Add(nullableInt??0);
    }
    return Orders;
}
于 2012-08-02T13:59:17.487 に答える