c#中的求和问题

我在VB中有一个LINQ查询:

Dim ss = _someClassDataSource.Sum(Function(s) TryCast(s, SomeClass).BreakdownCover)

BreakdownCover的类型是字符串.当我尝试用C#重写它时:

var ss = _someClassDataSource.Sum(s=>s.BreakdownCover);

我得到了例外:

Cannot implicitly convert type 'string' to 'int'

我该如何处理这个问题?

最佳答案
使用Int.Parse,不要将字符串转换为int

var ss=_someClassDataSource.Sum(s=>int.Parse(s.BreakdownCover));

如果你正在做VB.NET然后使用

var ss=_someClassDataSource.Sum(s=>Integer.Parse(s.BreakdownCover));

这就是为什么你不能将字符串转换为int:

Because the explicit cast isn’t implemented… ToString() is a general
method (implemented in System.Object) and if string would implement
the cast that would beg the question if all other classes need to
implement it too…

不使用Convert.ToInt32()可能会更好,因为当字符串为null时,Convert.ToInt32仍将返回一个值,而int.Parse将抛出该值.使用Convert.ToInt32可能会得到意外的结果.另见这个问题Whats the main difference between int.Parse() and Convert.ToInt32

当然,这是基于@Andy指出的背景.如果您将NULL视为0,那么任何一种方法都可以.

转载注明原文:c#中的求和问题 - 代码日志