2016-10-21 2 views
-3

В настоящее время я просматриваю список предметов (отелей), и мне нужно узнать цену за ночь, если редактор контента вводит более 1 ночи.C# Преобразование типа (строка в int)

if (!string.IsNullOrEmpty(resource)) 
{ 
    var results = JsonConvert.DeserializeObject(resource).ToString(); 
    if (!string.IsNullOrEmpty(results)) 
    { 
     var hotels = JsonConvert.DeserializeObject<ContainerHotelViewModel>(results).Hotels; 

     if (daysDuration > 1) 
     { 
      foreach (var hotel in hotels) 
      { 
       string convertInt = hotel.BaseRate; 
       int nightRate; 
       int.TryParse(hotel.BaseRate, out nightRate); 
       convertInt = nightRate/daysDuration;      
      } 
     } 

     return SortHotels(hotelIds, hotels); 
    } 
} 

Так я понимаю, что я конвертированы hotel.BaseRate от string к int. Поэтому для меня имеет смысл разделить hotel.BaseRate на daysDuration, чтобы получить цену за ночь, так как они оба сейчас. Пожалуйста, сообщите, что я делаю неправильно, так как моя последняя строка кода в цикле foreach дает мне сообщение об ошибке:

Невозможно неявно преобразовать тип int в строку.

+0

Пожалуйста, для будущего вопроса укажите [MCVE]. То есть в этом случае это будет 'string convertInt = 4/2;', что могло помочь вам найти проблему в первую очередь. –

ответ

3
string convertInt = hotel.BaseRate; 
int nightRate; 
int.TryParse(hotel.BaseRate, out nightRate); 
convertInt = nightRate/daysDuration; 

Вы сначала объявить как строку, а затем попытаться установить его в ответ от вашего уравнения.

Удалить первую строку и установить последний на это:

int convertInt = nightRate/daysDuration; 
+0

Спасибо за ваш сбой и помогите J.R. :) – Jim41Mavs

4

Вы определили convertInt как строка в начале строки:

string convertInt = hotel.BaseRate; 
+0

все имеет смысл сейчас! Спасибо за вашу помощь! – Jim41Mavs

1

Пожалуйста, измените свой код.

Old code : convertInt = nightRate/daysDuration; 

New code : convertInt = (nightRate/daysDuration).ToString(); 

Обновите свою старую строку кода новой строкой кода.

Спасибо.

2

Вы не можете преобразовать int в строку (convertInt - это строка в этом экземпляре).

Однако вы можете сделать это:

convertInt = (nightRate/daysDuration).ToString(); 

Кроме того, в качестве примечания: Если вы работаете с деньгами вы не должны использовать Int, как если бы вы были разделим £ 15 с 3 ночей, ответ был бы £ 5.33, но int не может содержать десятичные знаки.

+0

спасибо за вашу помощь, и я буду принимать ваши советы относительно того, чтобы не использовать int за деньги! – Jim41Mavs

+0

Извинения @ Jim41Mavs, Кажется, я полностью забыл указать, какую переменную вы должны использовать. Вместо Int используйте Double :) Также проведите некоторое исследование команды «var» для объявления переменных. –

+0

сделаю, спасибо Mark! – Jim41Mavs

1

Ваш poblem здесь:

foreach (var hotel in hotels) 
{ 
    string convertInt = hotel.BaseRate; 
    int nightRate; 
    int.TryParse(hotel.BaseRate, out nightRate); 
    convertInt = nightRate/daysDuration; 
} 

является string и вы пытаетесь сохранить в нем int формы значение nightRate/daysDuration. Вы должны использовать (nightRate/daysDuration).ToString()

Так свою линию:

convertInt = nightRate/daysDuration; 

Должно быть:

convertInt = (nightRate/daysDuration).ToString(); 
0

Ваша ошибка имеет смешиваясь типов. Программа ожидает строку, где есть int, поэтому вам нужно будет вызвать .ToString() в int. Еще лучше реорганизовать ваш код, чтобы все необходимые переменные были определены с помощью правильных типов, прежде чем их вызывать для вычислений. Кстати, рекомендуемый тип валюты - Decimal. Проблема с int заключается в том, что вы не можете представить свои десятичные единицы, такие как cent, и есть проблемы округления с использованием double.

Смежные вопросы