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

上記のプロパティにnull値を割り当てると構文エラーが発生します。C#でNull可能な型は何ですか?

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

Nullable型を使用してvalue型オブジェクトにnull値を設定できる場合、なぜエラーが発生するのか教えてください。

+3

いただきました正確なエラーメッセージが動作するはず同じタイプの結果を返すために必要とnull

ためのあなたのケースではその可能性はありませんか? –

+2

エラーとは何ですか?sArrElementsとは何ですか? – Justin

+0

」と「int」の間の暗黙的な変換がないため、「条件式のタイプを判別できませんでした」というエラーメッセージが表示される\t ' –

答えて

8

条件演算子の結果は、暗黙的に相互に変換可能な同じ型である必要があります。

あなたのケースでは、nullInt32があります。これは、その要件に違反します。

代わりにあなたがNULL可能Int32を返すInt32の、nullは、暗黙的にこの型に変換することができ、あなたのコードは動作(あるいは、int?nullをキャスト)なります。

2

次のように直接割り当てるためにあなたのnull

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

int?しようとするキャスト:

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

Null許容型は、彼らは彼らが言うまさに、次のとおりです。また、null値を格納できる単純な値の型を。
最後のコード行はまったく必要ないことをお勧めします。 null合体演算子を使用し、あなたが本当にヌルの場合には別の値を割り当てる場合

objDPRUtils.FileControlNo =sArrElements.Value(3); 

??:あなたが離れて得ることができる必要がありますこの場合には、ヌルである右側の場合にFileControlNoに値0を割り当てることになる

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

0

あなたのコードは、nullとInt32を混在させることはできません。彼らは同じタイプである必要があります。

あなたが成功した場合に値を設定するint.TryParseだけの試みを使用している場合は、同じ結果を達成すると、NULL可能なタイプは、一般的に

愚かな使われ方であるそのヌルかどうかを決定するために、フィールド上のHasValueを使用することができます例

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; } 
    } 

} 

あなたはtryParseは常に失敗するので_fileControlNoは(インデクサーを変更し、それが変更されます)を設定することはできませんので、この場合はHasValueためのテスト中にあなたのコードが実行されることはありませんのでご注意ます。

1

条件演算子は、これが

sArrElements.Value(3)==null ? (int?)null : Convert.ToInt32(sArrElements.Value(3)); 
関連する問題