-1
   int? _fileControlNo = null;
   public int? FileControlNo
    {
        get { return _fileControlNo; }
        set { _fileControlNo = value; }
    }

上記のプロパティにnull値を割り当てると、構文エラーが発生します。

objDPRUtils.FileControlNo =sArrElements.Value(3)==null ? null : Convert.ToInt32(sArrElements.Value(3));

NullableTypeを使用してvaluetypeオブジェクトにnull値を設定できる場合にエラーが発生する理由を誰かに説明してもらえますか。

4

6 に答える 6

8

条件演算子の結果は、相互に暗黙的に変換できる同じタイプである必要があります。

あなたの場合、あなたはとを持っていますnull-Int32これらはその要件に違反しています。

の代わりにInt32null許容型を返す場合Int32nullは暗黙的にこの型に変換でき、コードは機能します(または、をにキャストnullしますint?)。

于 2012-04-04T11:41:00.203 に答える
2

nullにキャストint?

objDPRUtils.FileControlNo =sArrElements.Value(3)==null ? (int?) null : Convert.ToInt32(sArrElements.Value(3));
于 2012-04-04T11:41:36.417 に答える
1

条件演算子は同じタイプの結果を返す必要がありますが、あなたの場合はnull

これはうまくいくはずです

sArrElements.Value(3)==null ? (int?)null : Convert.ToInt32(sArrElements.Value(3));
于 2012-04-04T11:44:38.830 に答える
0

このように直接割り当ててみてください:

objDPRUtils.FileControlNo =sArrElements.Value(3);
于 2012-04-04T11:42:34.007 に答える
0

null許容型とは、まさにそのとおりです。null値も格納できる単純な値型です。
コードの最後の行はまったく必要ないことをお勧めします。あなたは逃げることができるはずです:

objDPRUtils.FileControlNo =sArrElements.Value(3);

nullの場合に本当に別の値を割り当てたい場合は、null合体演算子を使用しますか?

objDPRUtils.FileControlNo =sArrElements.Value(3)??0;

FileControlNoこの場合、右側がnullの場合に値0が割り当てられます。

于 2012-04-04T11:43:45.127 に答える
0

コードはnull型を混合し、このインスタンスではInt32をそのように混合することはできません。それらは同じタイプである必要があります。

を使用int.TryParseして成功時に値を設定しようとすると、同じ結果が得HasValueられ、フィールドで使用して、そのnullかどうかを判断できます。これは、null許容型が通常どのように使用されるかを示します。

愚かな例

class Program
{
    private static int? _fileControlNo;

    static void Main(string[] args)
    {
        string[] sArrElements = new string[] { "1", "2", "3", null };

        int result;
        if (int.TryParse(sArrElements[3], out result))
        {
            FileControlNo = result;
        }


        if (_fileControlNo.HasValue)
        {
            // do something here
        }
    }

    public static int? FileControlNo
    {
        get { return _fileControlNo; }
        set { _fileControlNo = value; }
    } 

}

HasValuetryParseは常に失敗するため、_fileControlNoを設定できないため、この場合のテスト内のコードは実行されないことに注意してください(インデクサーを変更すると変更されます)。

于 2012-04-04T11:44:20.727 に答える