Что вы можете сделать, это создать новый класс, подобный примеру @ Gregoire, однако вы захотите переопределить метод ToString()
, чтобы он правильно отображался в поле со списком, например
public class Language
{
private string _name;
private string _code;
public Language(string name, string code)
{
_name = name;
_code = code;
}
public string Name { get { return _name; } }
public string Code { get { return _code; } }
public override void ToString()
{
return _name;
}
}
Вот документ , который послужил основой для инструмента командной строки UNIX diff .
Есть библиотеки. Вот один: http://code.google.com/p/google-diff-match-patch/
StackOverflow использует Beyond Compare для сравнения. Я считаю, что он работает, вызывая Beyond Compare из командной строки.
На самом деле это довольно просто; Программы DIFF - в большинстве случаев - основаны на Самой длинной общей последовательности , которая может быть решена с использованием алгоритма графа.
На этой веб-странице приведены примеры реализации на C #.
Это сложный вопрос. Выполнение сравнения означает поиск минимального расстояния редактирования между двумя файлами. То есть минимальное количество изменений, которые вы должны внести, чтобы преобразовать один файл в другой. Это эквивалентно поиску самой длинной общей подпоследовательности строк между двумя файлами, и это основа для различных программ сравнения. Самая длинная общая проблема с подпоследовательностями хорошо известна, и вы сможете найти решение динамического программирования в Google.
Проблема с подходом динамического программирования в том, что это O (n ^ 2). Таким образом, он очень медленный для больших файлов и непригоден для больших двоичных строк. Самая сложная часть в написании программы сравнения - оптимизация алгоритма для вашей проблемной области, чтобы вы получили разумную производительность (и разумные результаты). Бумага "