※この備忘録は初学者の私が学習、もしくは業務で体験した内容を忘れないために書き起こしたものとなります。
#目的
画面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等に代入」
をすることで対処できる。