2015-04-26 2 views
1

Я пытаюсь вычислить некоторые свойства, но я не уверен, как это сделать. Пропорции имеют тип string, и я знаю, что значения string не могут быть вычислены. Поэтому, хотя я собираюсь сделать их int.Преобразование строки в локальный int для вычисления

public class ItemProperties 
      { 
       public string Item { get; set; } 
       public string Description { get; set; } 
       public string Quantity { get; set; } 
       public string UnitPrice { get; set; } 
       public string Tax { get; set; } 

       public int TotalPay { get { return Quantity * UnitPrice; } set; } 
       //Now I get error on the line above because string can't calculate 

      } 

оператор «*» не может быть применен к операндам типа «строки» и «строки»

Поэтому в основном мне нужно преобразовать stringQuantity и UnitPrice местных int переменных и затем используйте их для расчета. Может кто-нибудь мне помочь?

UPDATE:

Вот код, который присваивает свойства string[]

var lines = File.ReadAllLines(openFileDialog.FileName); 
for (var i = 9; i + 2 < lines.Length; i += 6) 
      { 
       Items.Add(new ItemProperties { 
        Item = lines[i], 
        Description = lines[i + 1], 
        Quantity = lines[i + 2], 
        UnitPrice = lines[i + 3], 
        Tax = lines[i + 4] 
       }); 
      } 
      itemlst.ItemsSource = Items; 
+1

Почему вы не можете сделать Количество и UNITPRICE Интс? public int Количество {get; задавать; } public int UnitPrice {get; задавать; } – nimeshjm

+0

Потому что я назначаю их 'array of strings' varibales –

+0

Почему бы вам не преобразовать их в строки, прежде чем добавлять их в массив? –

ответ

3

быстрый способ (не проверяя никаких ошибок) будет:

public int TotalPay { get { return Convert.ToInt32(Quantity) * Convert.ToInt32(UnitPrice); } } 

Немного больше надежная версия:

public int TotalPay 
    { 
     get 
     { 
      int qty; 
      int price; 

      if (int.TryParse(Quantity, out qty) && int.TryParse(UnitPrice, out price)) 
      { 
       return qty * price; 
      } 

      return 0; 
     } 
    } 

Это решает вашу текущую проблему, но если свойства содержат данные int, они должны быть определены как int.

Код, который присваивает их массивам строк, должен преобразовывать свойства int в строки, а не наоборот.

EDIT Это преобразует свойство строки, считанное из файла, в int. Имейте в виду, что это вызовет ошибки, если значения в файле не являются int. У вас должна быть некоторая обработка ошибок, чтобы справиться с этим.

public class ItemProperties 
{ 
    public string Item { get; set; } 
    public string Description { get; set; } 
    public int Quantity { get; set; } 
    public int UnitPrice { get; set; } 
    public string Tax { get; set; } 

    public int TotalPay 
    { 
     get 
     { 
      return Quantity * UnitPrice; 
     } 
    } 
} 

    var lines = File.ReadAllLines(openFileDialog.FileName); 

    for (var i = 9; i + 2 < lines.Length; i += 6) 
     { 
      Items.Add(new ItemProperties 
      { 
       Item = lines[i], 
       Description = lines[i + 1], 
       Quantity = Convert.ToInt32(lines[i + 2]), 
       UnitPrice = Convert.ToInt32(lines[i + 3]), 
       Tax = lines[i + 4] 
      }); 
     } 
     itemlst.ItemsSource = Items; 
+0

Спасибо. Я обновил свой вопрос там, я показываю назначение строки. Можете ли вы помочь преобразовать свойства int в строки до того, как выполняются назначения –

+0

Почему 'Tax' по-прежнему является' string' и 'UnitPrice'' 'int'? Вы могли бы подумать, что они будут 'double UnitPrice' (или' float UnitPrice') и 'double Tax' (или' float Tax'). –

+0

Да, можно так предположить. Однако это бизнес-правила, специфичные для домена OP, и он должен их изменить. Я просто предлагаю изменения, которые ему нужны, чтобы ответить на вопрос OP. – nimeshjm

0

Вы должны сделать указанные свойства целыми, если они представляют целочисленные данные. Вы можете использовать статический Convert класс для разбора строки в виде целого числа, например .:

public class ItemProperties 
{ 
    public string Item { get; set; } 
    public string Description { get; set; } 
    public int Quantity { get; set; } 
    public int UnitPrice { get; set; } 
    public int Tax { get; set; } 

    public int TotalPay { get { return Quantity * UnitPrice; } set; } 

} 

Использование:

ItemProperties prop; 
try 
{ 
    prop.Quantity = Convert.ToInt32(stringVar); 
} 
catch(FormatException) 
{ 
    // error handling 
} 
+0

Где находится статический? –

+0

Класс 'System.Convert' статичен: https://msdn.microsoft.com/en-us/library/system.convert%28v=vs.110%29.aspx – mcserep

+0

О, я имел в виду в вашем коде. Я бы предположил включить статику в приведенный вами пример кода. Виноват –

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