这段代码在世界上做了什么? (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函数,它创建一个新的λ表达式。

该表达式然后被用于通过调用OrderByOrderByDescending功能(取决于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

回到顶部