0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【C#備忘録】string型はNULLを持てるが、NULLが入った値にTostring()メソッドは使用できない

Posted at

※この備忘録は初学者の私が学習、もしくは業務で体験した内容を忘れないために書き起こしたものとなります。

#目的
画面Aのint?型のResultData.noの値を、画面Bの行数が可変(ここでは、1,2行目は必ず存在し、3,4行目は可変行とする)のグリッド(GridDataクラスのnumberプロパティ)に代入したい
※画面Bの各行について、代入用に変数を割り当てる
 1行目…data_1,
 2行目…data_2,
 3行目…data_3(変数自体存在していない可能性あり),
 4行目…data_4(変数自体存在していない可能性あり)
※data_1,data_2,data_3,data_4はGridDataクラスのインスタントで、GridDataクラスには、string型のnumberプロパティが存在するものとする。
##誤答

// data_1,data_2は必ず存在するので、そのまま代入
data_1.number = data_2.number = ResultData.no.Tostring();

// data_3,data_4は存在しない可能性があるため、nullでない場合に代入
if (data_3 != null)
{
    data_3.number = ResultData.no.Tostring();
}
if (data_4 != null)
{
    data_4.number = ResultData.no.Tostring();
}

上記の場合、ResultData.noがNULLのとき、Tostring()メソッドでNULLを変換できないためエラーとなってしまう。

##正常に動作したコード

data_1.number = data_2.number = ResultData.no.HasValue ? ResultData.no.Tostring() : "";

if (data_3 != null)
{
    data_3.number = ResultData.no.HasValue ? ResultData.no.Tostring() : "";
}
if (data_4 != null)
{
    data_4.number = ResultData.no.HasValue ? ResultData.no.Tostring() : "";
}

上記のように、
「int?型のResultData.noに値が存在しているかどうか?⇒存在しているならResultData.noをTostring()メソッドで文字列変換し、data_1等に代入」
をすることで対処できる。

 

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?