c#中的求和问题

时间:2011-08-26 14:37:40

标签: c# vb.net-to-c#

我在VB中有一个LINQ查询:

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

其中BreakdownCover的类型为string。当我尝试用C#重写它时:

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

我得到例外:

Cannot implicitly convert type 'string' to 'int'

我该如何处理这个问题?

2 个答案:

答案 0 :(得分:6)

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

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

如果您正在使用VB.NET,请使用

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

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

  

因为未实现显式强制转换... ToString()是一般的   方法(在System.Object中实现)以及字符串是否实现   如果所有其他课程都需要,那么该演员会提出问题   实施它......

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

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

答案 1 :(得分:4)

您需要将字符串显式转换为int:

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

正如DustinDavis Convert.ToInt32所指出的,如果字符串为null,则返回0。如果您希望抛出异常,那么Int32.Parse将是更好的选择。但是,如果该字段接受空值,并且如果这些值应被视为0,那么这将返回预期结果。