Func 可选输出参数? C#

Func optional output parameters? C#

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

对于这个实例来说,方法重载似乎过于冗长,我可以利用其他任何东西来实现这种灵活性吗?

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

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 类 进行排序,除非您确实出于某种原因需要自己重新实现排序...

将方法更改为以下签名:

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

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