有人能用简单的英语解释一下它的语法吗:
这是该人的签名OrderBy
操作员:
OrderedSequence<TElement> OrderBy<TElement, TKey>(
this IEnumerable<TElement> source,
Func<TElement, TKey> keySelector
)
这表明您需要提供的委托类型OrderBy
is Func<TElement, TKey>
.
我正在寻找构建一个接收列表和字符串作为参数(列名)的函数,并且我陷入了语法的困境OrderBy
扩展方法。什么是Func<...>
意思是?我应该在哪里放置要排序的字符串参数?
Thanks.
这是您在实践中可能会看到的方式,假设
List<MyClass> list;
and
public class MyClass
{
public string Name { get; set; }
// ...
}
你可能会说
list.OrderBy(x => x.Name);
The this IEnumerable<TElement> source
这就是我们如何知道我们将其称为任何 IEnumerable 的扩展方法。
如果您使用动态属性名称,则必须变得更奇特。我首先定义一个辅助函数来确保我们的 lambda 不会变得太混乱。请注意,为了演示概念的时间和清晰度,我省略了一些内容,例如检查和错误处理:
public object GetPropertyByName(object obj, string propertyName)
{
object result = null;
var prop = obj.GetType().GetProperty(propertyName);
result = prop.GetValue(obj, null);
return result;
}
现在使用我们的助手,如下所示:
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass { Name = "John" });
list.Add(new MyClass { Name = "David" });
list.Add(new MyClass { Name = "Adam" });
list.Add(new MyClass { Name = "Barry" });
const string desiredProperty = "Name"; // You can pass this in
var result = list.OrderBy(x => GetPropertyByName(x, desiredProperty));
foreach (MyClass c in result)
{
Console.WriteLine(c.Name);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)