5

intでnull合体演算子を使用しようとしています。文字列で使用すると動作します

UserProfile.Name = dr["Name"].ToString()??"";

このようなintで使用しようとすると

UserProfile.BoardID = Convert.ToInt32(dr["BoardID"])??default(int);

このエラーメッセージが表示されます

演算子'??' タイプ'int'および'int'のオペランドには適用できません

http://davidhayden.com/blog/dave/archive/2006/07/05/NullCoalescingOperator.aspxがintデータ型で使用されているこのブログ投稿を見つけました。誰かが私が間違っていることを言うことができますか?

4

6 に答える 6

10

データベースからdr["BoardID"]がNULLの場合、実際に実行しようとしているのはBoardIDを0に設定していると思われます。dr ["BoardID"]がnullの場合、Convert.ToInt32は失敗するためです。これを試して:

UserProfile.BoardID = (dr["BoardID"] is DbNull) ? 0 : Convert.ToInt32(dr["BoardID"]);
于 2011-07-08T16:29:32.783 に答える
7

Anintは決してnullではないので、それに適用??しても意味がありません。

あなたが望むものを達成するための1つの方法はTryParse

int i;
if(!int.TryParse(s, out i))
{
    i = 0;
}

または、取得したいので、0またはdefault(int)ifを破棄できるのでTryParse、エラーの場合のの出力パラメータはすでにdefault(int)

int i;
int.TryParse(s, out i);

intリンクした記事の左側にはありません??int?。これはのショートカットでNullable<int>あり、サポートするnullので??意味があります。

int? count = null;    
int amount = count ?? default(int); //count is `int?` here and can be null
于 2011-07-08T16:26:20.907 に答える
5

ええ、もちろん...intヌルにすることはできないからです。
32ビットしかなく、すべての組み合わせが有効な整数を表します。

int?null可能性が必要な場合は、代わりに使用してください。(これはの省略形ですSystem.Nullable<int>。)

于 2011-07-08T16:26:36.627 に答える
1

リンク??演算子では、null値を持つ可能性のあるNullable<int>( )に適用されます。int?

ヌル合体演算子は次のように機能します。

演算子の左側の値がnullの場合は、演算子の右側の値を返します。Intは値型であるため、null値を持つことはできません。そのため、エラーが発生します。

于 2011-07-08T16:28:49.740 に答える
0

??上の演算子で行をリンクした例では、次のintとおりです。

int? count = null;

int amount = count ?? default(int);

したがって、その例ではintはnull許容です

于 2011-07-08T16:28:12.693 に答える
-1

null合体演算子は、参照型またはnull許容値型でのみ使用できます。例:string、またはhttp://msdn.microsoft.com/en-us/library/ms173224.aspxint?を参照してください

于 2011-07-08T16:27:46.797 に答える