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)
.
我正在尝试创建一个灵活的插入排序算法,该算法将对记录对象属性(月、日和时间,主要是数字数据)进行排序,因此我将 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)
.