2015-06-30 2 views
1

У меня есть два одинаковых файла с разными именами, которые используются для заполнения двух разных фреймов Deedle. Тем не менее, когда я пытаюсь сравнить одинаковые значения в двух кадрах данных, программа считает их не равными друг другу.Неисправность сравнения значений в разных данных данных Deedle

var Df1 = Frame.ReadCsv("C:/File1.csv"); 
var Df2 = Frame.ReadCsv("C:/File2.csv"); 

if (Df1["Header1", 3] == Df2["Header1",3]) 
{ 
    Console.WriteLine("The computer sees them as equal"); 
} 
else 
{ 
    Console.WriteLine("The computer sees them as not equal"); 
} 

Если я использую оба значения, компьютер видит их равными. Есть ли способ определить, равны ли эти два значения без их литья?

var Df1 = Frame.ReadCsv("C:/File1.csv"); 
var Df2 = Frame.ReadCsv("C:/File2.csv"); 

if ((string)Df1["Header1", 3] == (string)Df2["Header1",3]) 
{ 
    Console.WriteLine("The computer sees them as equal"); 
} 
else 
{ 
    Console.WriteLine("The computer sees them as not equal"); 
} 
+0

Каковы ценности, которые вы сравниваете (прежде чем бросить их в строки)? Они номера? Текстовые значения? –

ответ

1

Я могу только догадываться, что Df2["Header1",3] возвращает object.
Если посмотреть по следующей ссылке == operator MSDN, вы увидите, что реализация по умолчанию == для reference types возвращает true только если это тот же объект (тот же адрес в куче).
С Df1["Header1",3] и Df2["Header1",3] - это два разных объекта. == оператор возвращает false. Когда вы делаете результат на string, используется сравнение значений (см. Выше) и == оператор возвращает true.
Согласно Deedle ReadCsv документации, только примитивные типы выводятся, поэтому, если столбец содержит даты, тип возвращаемого значения будет объект вызывает поведение, описанное выше

+0

Это кажется логичным - и несколько указывает на риск перегрузки «==» в C# vs, скажем, java, где вам нужно использовать определенный метод, например .equals(), если вы хотите сравнить значение с исходным объектом Рекомендации. –

+0

@ChrisStratton, Интересный момент о рисках перегрузки оператора. Я нашел связанный вопрос о SO, который подробно обсуждает этот вопрос. http://stackoverflow.com/questions/77718/why-doesnt-java-offer-operator-overloading. Мне очень понравился второй ответ (тот, у которого самый высокий балл, а не принятый). Особенно упоминается Джеймс Гослинг и Бьярн Страуструп. Я согласен с Страуструпом. Возможность неправильно использовать функцию не является достаточной причиной для ее отключения. – DanielS

+0

Я использовал Df1.Equals (Df2) однажды @DanielS указал мне в правильном направлении –

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