这段代码在世界上做了什么? (C#)
我一直在阅读一本以C#编写的书。我是一个VB.NET开发人员(而且是一个非常初级的开发人员),并且在包含许多我以前从未见过的事情的代码中遇到了很多问题。我对Lambda表达式有基本的了解。这段代码在世界上做了什么? (C#)
public List<T> SortByPropertyName(string propertyName, bool ascending) {
var param = Expression.Parameter(typeof(T), "N");
var sortExpression = Expression.Lambda<Func<T, object>>
(Expression.Convert(Expression.Property(param, propertyName),
typeof(object)), param);
if (ascending)
{
return this.AsQueryable<T>().OrderBy<T, object>(sortExpression).ToList<T>();
}
else
{
return this.AsQueryable<T>().OrderByDescending<T, object>(sortExpression).ToList<T>
}
}
有没有人能告诉我这个代码在做什么以及正在使用什么概念? 我也试图将这个代码转换成VB.NET运气不错,所以任何帮助,将不胜感激。
回答:
总的来说,代码是按照指定的属性名称按升序或降序排列某些东西(可能是一个列表?)。必须已经有一个通用类型T
指定在这个类的其他地方。
的代码通过调用Expression.Parameter
创建一个新的,然后传递该参数到Expression.Lambda
函数,它创建一个新的λ表达式。
该表达式然后被用于通过调用OrderBy
或OrderByDescending
功能(取决于ascending
参数选择)对列表进行排序,并返回排序列表作为新的List<T>
。
我目前不在Visual Studio之前,但这应该是一个足够紧密的翻译VB为你。
Public Function SortByPropertyName(ByVal propertyName as String, ByVal ascending as Boolean) as List(Of T) Dim param = Expression.Parameter(GetType(T), "N")
Dim sortExpression = Expression.Lambda(Of Func(Of T, Object))(Expression.Convert(Expression.Property(param, propertyName), GetType(Object)), param)
If ascending Then
return Me.AsQueryable(Of T).OrderBy(Of T, Object)(sortExpression).ToList()
Else
return Me.AsQueryable(Of T).OrderByDescending(Of T, Object)(sortExpression).ToList()
End If
End Function
回答:
这应该工作:
Return Me.AsQueryable.OrderBy(sortExpression).ToList
参见:http://www.codeproject.com/KB/recipes/Generic_Sorting.aspx
以上是 这段代码在世界上做了什么? (C#) 的全部内容, 来源链接: utcz.com/qa/257351.html