Проблема с суммой в c # - PullRequest
       13

Проблема с суммой в c #

3 голосов
/ 26 августа 2011

У меня есть запрос LINQ в VB:

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 ]

6 голосов
/ 26 августа 2011

использовать 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 (), потому что Convert.ToInt32 по-прежнему будет возвращать значение, когда строка пуста, а int.Parse будет выбрасывать. Вы можете получить неожиданные результаты с Convert.ToInt32. Также см. Этот вопрос В чем основное различие между int.Parse () и Convert.ToInt32

Конечно, это основано на контексте, который указал @Andy. Если вы согласны с тем, что NULL рассматривается как 0, тогда любой из методов будет работать.

4 голосов
/ 26 августа 2011

Вам необходимо явно преобразовать строку в тип int:

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

Как указывает DustinDavis Convert.ToInt32 вернет 0, если строка пуста. Если вы предпочитаете исключение, тогда Int32.Parse будет лучшим вариантом. Однако, если поле принимает пустые значения и если они должны рассматриваться как 0, это вернет ожидаемый результат.

...