Func可选输出参数? C#

时间:2017-04-11 15:01:15

标签: c# sorting optional-parameters

我正在尝试创建一个灵活的插入排序算法,它将记录对象属性(月,日和时间,主要是数字数据),所以我将Func委托作为参数传递给我的插入排序方法,这些当然我的属性是整数,但我也希望能够对数据执行相同的功能,例如可以表示的双精度数,幅度,纬度,经度等。

对于这个实例来说,方法重载似乎太冗长了,还有其他我可以用来实现这种灵活性的东西吗?

2 个答案:

答案 0 :(得分:4)

听起来你只需要使它成为通用的,并限制类型进行比较:

public static void InsertionSort<T>(
    RecordCollection records, 
    Func<SesmicRecord, T> propertySelector)
    where T : IComparable<T>

然后在需要比较值时调用x.CompareTo(y)

或者您可以使用比较器:

public static void InsertionSort<T>(
    RecordCollection records, 
    Func<SesmicRecord, T> propertySelector, 
    IComparer<T> comparer)
{
    comparer = comparer ?? Comparer<T>.Default;
    // Now use comparer.Compare(x, y) wherever you need to compare values
}

或者只是使用LINQ或现有的BCL类进行排序,除非真的需要因某种原因重新实现排序...

答案 1 :(得分:1)

将方法更改为以下签名:

public static void InsertionSort<T>(RecordCollection RecordCollection, Func<SesmicRecord, T> properyField)
    where T: IComparable<T>

现在利用IComparable<T>界面:t1.CompareTo(t2)