为什么我不能将 int 或 null 分配给 int

本文关键字:int null 分配 为什么 不能 | 更新日期: 2023-09-27 18:35:58

我有以下类:

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"和"之间的隐式转换

有人可以给我一些建议,为什么会发生这种情况吗?

为什么我不能将 int 或 null 分配给 int

条件运算符的两端必须返回相同的类型,否则应该存在隐式转换。intnull 之间没有隐式转换,所以你必须将任一操作数转换为int?

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

或者你可以做:

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

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

要使其正常工作,您必须分配一个可为空的整数。

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

这就是错误所说的无法确定类型,您只发送不是类型的 null,因此您需要告诉您想要的类型。条件表达式在两个分支上需要相同的类型,或者需要是从其中一种类型到另一种类型的隐式转换。

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

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