0

私は次のクラスを持っています:

public class QuestionDetail
{
    public int ProblemId { get; set; }
    public int QuestionId { get; set; }
    public string Answer { get; set; }
}

public class QuestionResponseToClient
{
    public int? ProblemId { get; set; }
    public int? QuestionId { get; set; }
    public string Text { get; set; }
}

私はintを使用しましたか?ユーザーが管理者ロールにない場合、クライアントに null を返すことができるようにしたいからです。

私のコードでは、これを次のようにチェックします。

bool adminUser = User.IsInRole("Admin");

次に、次のように新しいオブジェクトを作成します。

var questionResponseToClient = new QuestionResponseToClient
{
    QuestionId = (adminUser == true) ? questionDetails.QuestionId : null,
    ...
    ...

しかし、これは次のメッセージで失敗します。

エラー 1 'int' と '' の間に暗黙的な変換がないため、条件式の型を特定できません

なぜこれが起こっているのかについて、誰かが私にアドバイスをくれますか?

4

3 に答える 3

4

条件演算子の両側が同じ型を返すか、暗黙の変換が存在する必要があります。intと の間に暗黙的な変換はないnullため、いずれかのオペランドを にキャストする必要があります。int?

QuestionId = (adminUser == true) ? (int?) questionDetails.QuestionId : null,

または、次のことができます。

QuestionId = (adminUser == true) ? questionDetails.QuestionId : (int?) null,

intint?( )の間には暗黙的な変換があるためNullable<int>です。

于 2013-10-17T13:21:54.833 に答える
2

それが機能するには、null 許容の int を割り当てる必要があります。

QuestionId = (adminUser == true) ? questionDetails.QuestionId : new int?

それが、タイプを判別できないというエラーです。タイプではない null のみを送信しているため、必要なタイプを指定する必要があります。条件式は、両方の分岐で同一の型である必要があるか、一方の型から他方の型への暗黙的な変換である必要があります。

于 2013-10-17T13:21:26.483 に答える
1

コンパイラは条件式の型を判別できません。代わりにこれを試してください:

QuestionId = (adminUser == true) ? (int?)questionDetails.QuestionId : null
于 2013-10-17T13:21:34.007 に答える