C# 运算符不能应用于“int”和“int”类型的操作数
下面的代码在发生某些事情之前工作正常,现在返回此错误消息: 运算符“??”不能应用于“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<
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”成功了。非常感谢。