我在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)
我该如何处理这个问题?
使用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,那么任何一种方法都可以.