运算符不能应用于'int'和'int'类型的操作数

时间:2018-03-05 20:15:44

标签: 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> fee { get; set; }

从我的理解“??”不能在不可为空的类型上调用operator。

不可为空或删除'?'来自'int?'什么都不做

有什么建议吗?谢谢!

塞西

1 个答案:

答案 0 :(得分:1)

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

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

示例:

http://rextester.com/UVLX36130

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

出现此错误:

  

无法隐式转换类型&#39; int?&#39; to&#39; int&#39;。存在显式转换(您是否错过了演员?)

与您的错误相同。

您能否提供一些关于您正在使用的C#版本的更多信息?

你能仔细检查一下编译错误确实在这一行吗?

或者更好,给出一个展示问题的可编辑示例?

Sum()上的文档:https://msdn.microsoft.com/en-us/library/bb156065(v=vs.110).aspx