为什么我不能为int分配int或null?

时间:2013-10-17 13:19:43

标签: c# nullable

我有以下课程:

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'和''

之间的隐式转换

有人可以给我一些建议吗?为什么会这样?

3 个答案:

答案 0 :(得分:4)

条件运算符的两端必须返回相同的类型,或者应该存在隐式转换。 intnull之间没有隐式转换,因此您必须将操作数转换为int?

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

或者你可以这样做:

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

由于intint?Nullable<int>)之间存在隐式转换。

答案 1 :(得分:2)

要使它工作,你必须分配一个可以为空的int。

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

这就是错误所说的不可能确定类型,你只发送一个不是类型的null,所以你需要告诉你想要什么类型。 条件表达式在两个分支上都需要相同的类型,或者需要是从一个类型到另一个类型的隐式转换。

答案 2 :(得分:1)

编译器无法确定条件表达式的类型。试试这个:

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