1

我有以下接受BuildAppStat对象作为参数的方法。
但是有时它可能为空。

所以我称之为:

sourceId: bas.BuildAppStatId ?? null

并得到编译错误

运算符“”不能应用于 and 类型的操作<int>null

我怎样才能解决这个问题?

public PageBuildVrsn EditPageBuildVrsn(string caption, string nameInUse, string description, BuildAppStat bas = null, int pageBuildVrsnTypeId = 1)
{
    PageBuildVrsn pbv = Create(pageBuildVrsnTypeId, caption, nameInUse, description);
    pbv.ParentBuildAppStats = new List<BuildAppStat>();
    pbv.ParentBuildAppStats.Add(
        BasFactory.Create(
            DateTimeOffset.Now,
            true,
            sourceId: bas.BuildAppStatId ?? null
        )
    );

    return pbv;
}
4

3 回答 3

4

您只能将空合并运算符与第一个操作数一起使用,该操作数是可空类型(可空值类型或任何引用类型)。听起来bas.BuildAppStatId只是一个int,这意味着您不能将空合并运算符与它一起使用。

如果您试图防止bas自己为空,您需要:

sourceId: bas == null ? (int?) null : bas.BuildAppStatId,
于 2013-06-06T08:09:17.340 回答
0

?? Operator (C# Reference)

?? _ 运算符称为空合并运算符,用于为可空值类型引用类型定义默认值。

由于 yourbas.BuildAppStatIdint,因此不能??在此处使用。

于 2013-06-06T08:11:28.057 回答
0

BuildAppStatId 应声明为可为空的 int。

int?

那么如果您对“?? null”有疑问,请使用

... ?? null as int?

或者

... ?? default(int?)
于 2013-06-06T08:13:04.363 回答