gpt4 book ai didi

c# - TKey 上具有不同数据类型的 OrderBy keySelector

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:15 25 4
gpt4 key购买 nike

我需要一个返回 keySelector 的方法,它可以在调用 OrderBy 表达式时使用。问题是 keySelector 是一个通用委托(delegate),我希望该方法在 TKey 上返回具有不同数据类型的 keySelectors:

Func<TSource,TKey> keySelector

我想完成这个,但不是使用 lambda 表达式,而是一个返回 keySelector(TKey=string 或 int)的方法:

IEnumerable<Person> orderedByFirstName = persons.OrderBy(p => p.FirstName);
IEnumerable<Person> orderedByAge = persons.OrderBy(p => p.Age);

是否可以有一种方法以某种方式返回 TKey 上不同类型的 keySelectors?不可能返回 lambda 表达式,但类似的东西......

只要该方法只返回数据类型为字符串的 keySelectors,一切正常:

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

public class Behavior
{
public virtual string GetOrderByKeySelector(Person p)
{
return p.FirstName;
}
}

public class SpecializedBehavior : Behavior
{
public override string GetOrderByKeySelector(Person p)
{
return p.LastName;
}
}

List<Person> persons = new List<Person>
{
new Person{Age=10, FirstName="Pelle", LastName="Larsson"},
new Person{Age=90, FirstName="Nils", LastName="Nilsson"},
new Person{Age=15, FirstName="Olle", LastName="Johansson"},
new Person{Age=30, FirstName="Kalle", LastName="Svensson"}
};

这样使用:

SpecializedBehavior behavior = new SpecializedBehavior();
IEnumerable<Person> orderedResult = persons.OrderBy(behavior.GetOrderByKeySelector);

最佳答案

如何将集合改为方法。

void Main()
{
SpecializedBehavior behavior = new SpecializedBehavior();
IEnumerable<Person> orderedResult = behavior.Sort(persons);
}

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

public class Behavior
{
public virtual IEnumerable<Person> Sort(IEnumerable<Person> persons)
{
return persons.OrderBy(p => p.FirstName);
}
}

public class SpecializedBehavior : Behavior
{
public override IEnumerable<Person> Sort(IEnumerable<Person> persons)
{
return persons.OrderBy(p => p.Age);
}
}


List<Person> persons = new List<Person>
{
new Person{Age=10, FirstName="Pelle", LastName="Larsson"},
new Person{Age=90, FirstName="Nils", LastName="Nilsson"},
new Person{Age=15, FirstName="Olle", LastName="Johansson"},
new Person{Age=30, FirstName="Kalle", LastName="Svensson"}
};

关于c# - TKey 上具有不同数据类型的 OrderBy keySelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com