c#中的求和问题

use*_*618 3 c# vb.net-to-c#

我在VB中有一个LINQ查询:

Dim ss = _someClassDataSource.Sum(Function(s) TryCast(s, SomeClass).BreakdownCover)
Run Code Online (Sandbox Code Playgroud)

BreakdownCover类型在哪里string.当我尝试用C#重写它时:

var ss = _someClassDataSource.Sum(s=>s.BreakdownCover);
Run Code Online (Sandbox Code Playgroud)

我得到了例外:

Cannot implicitly convert type 'string' to 'int'
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个问题?

Dus*_*vis 6

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

var ss=_someClassDataSource.Sum(s=>int.Parse(s.BreakdownCover));
Run Code Online (Sandbox Code Playgroud)

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

var ss=_someClassDataSource.Sum(s=>Integer.Parse(s.BreakdownCover));
Run Code Online (Sandbox Code Playgroud)

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

因为未实现显式转换... ToString()是一种通用方法(在System.Object中实现),如果字符串将实现转换,如果所有其他类也需要实现它,那么它将提出问题...

不使用Convert.ToInt32()可能会更好,因为当字符串为null时,Convert.ToInt32仍将返回一个值,而int.Parse将抛出该值.使用Convert.ToInt32可能会得到意外的结果.也看到这个问题是什么是int.Parse()和Convert.ToInt32之间的主要区别

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