为什么我不能将 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?
QuestionId = (adminUser == true) ? (int?) questionDetails.QuestionId : null,
或者你可以做:
QuestionId = (adminUser == true) ? questionDetails.QuestionId : (int?) null,
由于 int
和 int?
之间存在隐式转换 ( Nullable<int>
)。
要使其正常工作,您必须分配一个可为空的整数。
QuestionId = (adminUser == true) ? questionDetails.QuestionId : new int?
这就是错误所说的无法确定类型,您只发送不是类型的 null,因此您需要告诉您想要的类型。条件表达式在两个分支上需要相同的类型,或者需要是从其中一种类型到另一种类型的隐式转换。
编译器无法确定条件表达式的类型。试试这个:
QuestionId = (adminUser == true) ? (int?)questionDetails.QuestionId : null