1

何らかの理由で、Visual Studio には次の行に問題があります。

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  null : Convert.ToInt32(allIDValues[1]);

具体的にはそのConvert.ToInt32(allIDValues[1])部分。エラーは「C#: これらの型は互換性がありません 'null' : 'int'」です

ただし、そのロジックを以下でエミュレートしても問題はありません。

if (string.IsNullOrEmpty(allIDValues[1]) || Convert.ToInt32(allIDValues[1]) == 0)
                stakeHolder.SupportDocTypeId = null;
            else
                stakeHolder.SupportDocTypeId = Convert.ToInt32(allIDValues[1]);

MandatoryStakeholder.SupportDocTypeID型は int? です。if ステートメントで文字列を int に変換できる理由がわかりませんが、? では変換できません。オペレーター。

4

3 に答える 3

3

を に変更? null? (int?) nullます。

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  (int?)null : Convert.ToInt32(allIDValues[1]);
于 2013-02-26T20:55:45.920 に答える
3

をにキャストしてみてnullくださいint?

MandatoryStakeholder.SupportDocTypeID = 
    (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  
       (int?)null : 
       Convert.ToInt32(allIDValues[1]);
于 2013-02-26T20:56:04.900 に答える
2

その理由は、if バージョンでは、

 stakeHolder.SupportDocTypeId = Convert.ToInt32(allIDValues[1]);

静かに変換されています

 stakeHolder.SupportDocTypeId = new int?(Convert.ToInt32(allIDValues[1]));

同等の 3 進数を取得するには、コードを次のように変更する必要があります。

MandatoryStakeholder.SupportDocTypeID = (String.IsNullOrEmpty(allIDValues[1]) || (allIDValues[1] == "0")) ?  null : new int?(Convert.ToInt32(allIDValues[1]));
于 2013-02-26T20:59:59.237 に答える