我在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'
我该如何处理这个问题?
答案 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,那么这将返回预期结果。