[英]C# Lambda expression with IComparer and Array.Sort (converting from Java to C#)
I'm trying to convert my lambda expression that uses the Comparator
interface from Java to C#. 我正在尝试将使用
Comparator
接口的lambda表达式从Java转换为C#。 I got the following error: 我收到以下错误:
Cannot convert lambda expression to type '
System.Collections.IComparer
' because it is not a delegate type.无法将lambda表达式转换为类型'
System.Collections.IComparer
',因为它不是委托类型。
I tried to switch to Comparison<T>
, but it doesn't work with my Array.Sort
methods: 我试图切换到
Comparison<T>
,但是它不适用于Array.Sort
方法:
Array.Sort(Population, Population[0].Comparator);
Array.Sort(population, 0, population.Length, population[0].Comparator);
PregancyIndividual implements IGeneticIndividual interface. PregancyIndividual实现IGeneticIndividual接口。
public virtual IGeneticIndividual[] selectPopulation(IGeneticIndividual[] population)
{
IGeneticIndividual[] res = new IGeneticIndividual[population.Length];
Array.Sort(population, 0, population.Length, population[0].Comparator);
Here is my Java code: 这是我的Java代码:
@Override
public Comparator getComparator() {
Comparator<PregnancyIndividual> IndividualFitnessComparator
= (PregnancyIndividual ind1, PregnancyIndividual ind2) -> {
int res = 1;
double fitness1 = ind1.getFitnessCalculator().calculateFitness(ind1);
double fitness2 = ind2.getFitnessCalculator().calculateFitness(ind2);
if (fitness1 > fitness2) {
return -1;
}
if (fitness1 == fitness2) {
return 0;
}
return res;
};
return IndividualFitnessComparator;
}
PregnancyIndividual
implementing my own interface : PregnancyIndividual
实现我自己的界面:
public class PregnancyIndividual implements IGeneticIndividual
I am now trying to implement my code for C#: 我现在正在尝试为C#实现我的代码:
public virtual IComparer Comparator
{
get
{
//<PregnancyIndividual>
IComparer IndividualFitnessComparator = (PregnancyIndividual ind1, PregnancyIndividual ind2) =>
{
int res = 1;
double fitness1 = ind1.FitnessCalculator.calculateFitness(ind1);
double fitness2 = ind2.FitnessCalculator.calculateFitness(ind2);
if (fitness1 > fitness2)
{
return -1;
}
if (fitness1 == fitness2)
{
return 0;
}
return res;
};
return IndividualFitnessComparator;
}
}
Change your PregnancyIndividual class to implement Icomparer and implement Compare as bellow: 更改您的PregnancyIndividual类以实现Icomparer并实现以下比较:
class PregnancyIndividual : IComparer
{
int IComparer.Compare(object a, object b)
{
PregnancyIndividual ind1 = (PregnancyIndividual)a;
PregnancyIndividual ind2 = (PregnancyIndividual)b;
int res = 1;
double fitness1 = ind1.FitnessCalculator.calculateFitness(ind1);
double fitness2 = ind2.FitnessCalculator.calculateFitness(ind2);
if (fitness1 > fitness2)
{
return -1;
}
if (fitness1 == fitness2)
{
return 0;
}
return res;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.