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?因为如果用户不是管理员角色,我希望能够向客户端返回空值。

在我的代码中,我通过以下方式检查:

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,

int因为和int?( Nullable<int>)之间存在隐式转换。

于 2013-10-17T13:21:54.833 回答
2

要使其工作,您必须分配一个可为空的 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 回答