C# 运算符不能应用于“int”和“int”类型的操作数

C# 运算符不能应用于“int”和“int”类型的操作数,c#,linq,C#,Linq,下面的代码在发生某些事情之前工作正常,现在返回此错误消息: 运算符“??”不能应用于“int”和“int”类型的操作数 这是我以前工作过的代码,但现在有什么原因导致抛出此错误 var Amount = (from x in db.Users where x.userID == ID select (x.fee)).Sum() ?? 0; “费用”定义为 public int? fee { get; set; } //and tried this too public Nullable<

下面的代码在发生某些事情之前工作正常,现在返回此错误消息: 运算符“??”不能应用于“int”和“int”类型的操作数

这是我以前工作过的代码,但现在有什么原因导致抛出此错误

var Amount = (from x in db.Users where x.userID == ID select (x.fee)).Sum() ?? 0;
“费用”定义为

public int? fee { get; set; } //and tried this too

public Nullable<int> fee { get; set; }
从我的理解来看??不能对不可为null的类型调用运算符

使其不可为null或将“?”从“int”中删除都没有任何作用

有什么建议吗?谢谢大家!


Ceci

您不需要使用??0。 这将导致:

var Amount = (from x in db.Users where x.userID == ID select (x.fee)).Sum();
例如:

LINQ Sum函数已接受可为空的类型。它忽略空值,或将它们视为默认值0,这是等价的。

此外,它将返回与求和相同的可空类型int?在这种情况下

我真的不明白您是如何通过提供的代码获得错误的,因为这些代码不会导致任何错误:

int?[] test = {1,2,3, null};

var sum = (from x in test select x).Sum(); // no error here

Console.WriteLine(sum);

var sum2 = (from x in test select x).Sum() ?? 0; // neither there is an error here

Console.WriteLine(sum2);
但是,这不会编译:

int sum3 = (from x in test select x).Sum(); // compilation error
出现此错误时:

无法将类型“int”隐式转换为“int”。存在显式转换。是否缺少强制转换

这和你的错误不一样

你能提供一些关于你正在使用的C版本的更多信息吗

您能再次检查编译错误是否确实在这一行上吗

或者更好的是,给出一个可编译的示例来展示问题


单据金额:

C,操作员??被称为空合并运算符,用于检查给定值是否为空,如果为空,则检查以下值??将分配给该值。如果在db.Users中使用var Amount=from x,其中x.userID==ID,请选择x.fee.Sum金额的类型是什么?可为null和int?严格等同,这不应该成为问题。我无法重现您的编译错误。你能创造一个新的世界吗?来编译足够的代码来重现问题,并且尽可能短。删除??“0”成功了。非常感谢。