我有以下课程:
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'和''
之间的隐式转换
有人可以给我一些建议吗?为什么会这样?
答案 0 :(得分:4)
条件运算符的两端必须返回相同的类型,或者应该存在隐式转换。
int
和null
之间没有隐式转换,因此您必须将操作数转换为int?
QuestionId = (adminUser == true) ? (int?) questionDetails.QuestionId : null,
或者你可以这样做:
QuestionId = (adminUser == true) ? questionDetails.QuestionId : (int?) null,
由于int
和int?
(Nullable<int>
)之间存在隐式转换。
答案 1 :(得分:2)
要使它工作,你必须分配一个可以为空的int。
QuestionId = (adminUser == true) ? questionDetails.QuestionId : new int?
这就是错误所说的不可能确定类型,你只发送一个不是类型的null,所以你需要告诉你想要什么类型。 条件表达式在两个分支上都需要相同的类型,或者需要是从一个类型到另一个类型的隐式转换。
答案 2 :(得分:1)
编译器无法确定条件表达式的类型。试试这个:
QuestionId = (adminUser == true) ? (int?)questionDetails.QuestionId : null