Я предпочитаю WinMerge для diffs, таким образом, в контекстном меню в Проводнике [Средство просмотра TortoiseSVN\Settings\External Programs\Diff] я выбираю опцию External со значением:
C:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -dl %bname -dr %yname %base %mine
Однако можно все еще использовать TortoiseMerge путем содержания клавиши Shift при нажатии на Diff в контекстном меню. Содержание клавиши Shift заставляет TortoiseSVN использовать TortoiseMerge вместо настроенной разности или инструмента слияния.
мне также нравится CommitMonitor, который покажет Вам новое действие в репозитории.
Наконец, существуют хорошие советы в tortoisesvn.net .
Using LINQ:
var sortedList = _allStatInfo.OrderBy(si => si.date).ToList();
Sorting the original list:
_allStatInfo.Sort(new Comparison<StatInfo>((x, y) => DateTime.Compare(x.date, y.date)));
Я вижу, что вы все равно получили ответ, но ...
Вы можете избежать некоторого уродства, просто разделив утверждение на две половины:
Comparison compare = (x, y) => DateTime.Compare (x.date, y.date);
_allStatInfo.Sort (сравнение);
Возможно, вы захотите просто вызвать CompareTo
напрямую:
Comparison compare = (x, y) => x.date.CompareTo (y.date);
_allStatInfo.Sort (сравнение);
Вы можете создать реализацию IComparer
, используя мой класс ProjectionComparer
-
это часть MiscUtil , и я включил версию без комментариев в нижней части
этот ответ. Затем вы должны написать:
_allStatInfo.Sort (ProjectionComparer .Create (x => x.date));
Даже если вы используете .NET 2.0, вы все равно можете использовать LINQ через LINQBridge .
Вот класс ProjectionComparer
, необходимый для второго ответа. Первая пара классов на самом деле просто помощники, позволяющие лучше работать с обобщенным выводом типов.
public static class ProjectionComparer
{
public static ProjectionComparer<TSource, TKey> Create<TSource, TKey>
(Func<TSource, TKey> projection)
{
return new ProjectionComparer<TSource, TKey>(projection);
}
public static ProjectionComparer<TSource, TKey> Create<TSource, TKey>
(TSource ignored, Func<TSource, TKey> projection)
{
return new ProjectionComparer<TSource, TKey>(projection);
}
}
public static class ProjectionComparer<TSource>
{
public static ProjectionComparer<TSource, TKey> Create<TKey>
(Func<TSource, TKey> projection)
{
return new ProjectionComparer<TSource, TKey>(projection);
}
}
public class ProjectionComparer<TSource, TKey> : IComparer<TSource>
{
readonly Func<TSource, TKey> projection;
readonly IComparer<TKey> comparer;
public ProjectionComparer(Func<TSource, TKey> projection)
: this (projection, null)
{
}
public ProjectionComparer(Func<TSource, TKey> projection,
IComparer<TKey> comparer)
{
projection.ThrowIfNull("projection");
this.comparer = comparer ?? Comparer<TKey>.Default;
this.projection = projection;
}
public int Compare(TSource x, TSource y)
{
// Don't want to project from nullity
if (x==null && y==null)
{
return 0;
}
if (x==null)
{
return -1;
}
if (y==null)
{
return 1;
}
return comparer.Compare(projection(x), projection(y));
}
}
Чтобы проиллюстрировать ответ Роберта К. Картаино:
public class StatInfo : IComparable<StatInfo>
{
public string contact;
public DateTime date;
public string action;
public int CompareTo(StatInfo value)
{
return this.date.CompareTo(value.date);
}
}
var _allStatInfo = new List<StatInfo>();
// this now sorts by date
_allStatInfo.Sort();
Не самое общее решение, но хорошее если вы собираетесь сортировать только по дате. И, как сказал Роберт, вы всегда можете изменить сортировку по умолчанию, передав параметр IComparer методу сортировки.
Используйте лямбда-выражение для сопоставления пары для сравнения:
_allStatInfo.Sort((x, y) => x.date - y.date);
Для DateTime не должно быть необходимости сравнивать.
_allStatInfo.OrderyBy(d => d.date);
или
_allStatInfo.OrderByDescending(d => d.Date);