2014-09-14 3 views
1

Я хочу сравнить элементы в массиве типа объекта с пользовательским вводом. Для этого я написал следующий код. В коде нет ошибки, но я узнал, что сравнение объектов не работает, как я ожидал. Как я могу изменить свой код для сравнения пользовательских входов с предопределенным массивом?Сравнение массива объектов в C#

class Program 
{ 
    static void Main(string[] args) 
    { 
     object[] Mathfunction = new object[] { '+','-','*','/'}; 
     Console.WriteLine("Enter"); 
     object input = Console.ReadLine(); 
     for(int i=0;i<4;i++) 
     { 
      if (Mathfunction[i] == input) 
      { 
       Console.WriteLine("done"); 
       Console.ReadLine(); 
      } 
     } 
    } 
+0

Почему бы просто не использовать 4 отдельных оператора 'if'? –

+0

@ Okuma.Scott, если бы было бы сложнее поддерживать и понимать. Это хорошо объяснено здесь. http://stackoverflow.com/questions/1554180/why-is-the-if-statement-considered-evil – codea

ответ

3

Вы сравнения string с до боксировал char с.
Это не будет равным.

Вы должны объявить свои переменные как фактические типы данных, которые вы используете вместо object; то компилятор скажет вам, что вы делаете неправильно, чтобы исправить это.

1

Есть ли причина, по которой вам крайне необходимо преобразовать символ в объект? Если нет, я бы предложил вам преобразовать его обратно в char [], и сравнение будет исправлено. В противном случае, когда вы сравниваете два объекта, на самом деле это сравнение двух ссылок, а не значений (char). И поскольку один объект был создан при запуске массива, один вводится пользователем, два из них никогда не будут одинаковыми, и сравнение никогда не вернет true.

0

попробовать что-то вроде этого, в вашем коде вход будет находиться в одном объекте при использовании массива объектов для хранения символов, вы можете сделать как следующее:

object[] Mathfunction = new object[] { '+', '-', '*', '/' }; 
Console.WriteLine("Enter"); 
object input = Console.ReadLine(); 
string[] inputString = input.ToString().Split(' '); 
bool isEqual = true; 
for (int i = 0; i < 4; i++) 
{ 
    if (Mathfunction[i].ToString() != inputString[i]) 
    { 
     isEqual = false; 
    }    
} 
if (isEqual) 
{ 
    Console.WriteLine("done"); 
    Console.ReadLine(); 
} 
1

У меня есть изменить мой как сейчас, работает, как я и ожидал.

class Program 
{ 
    static void Main(string[] args) 
    { 
     object[] Mathfunction = new object[] { '+','-','*','/'}; 
     Console.WriteLine("Enter"); 
     String input = Console.ReadLine(); 
     for(int i=0;i<4;i++) 
     { 
      String str = (Mathfunction[i].ToString()); 
      if (String.Equals(str,input)) 
      { 
       Console.WriteLine("done"); 
       Console.ReadLine(); 
      } 
     } 
    } 
Смежные вопросы