Vb.net 这个代码到底是做什么的?(C#)
我一直在读一本C语言的书。我是一名VB.NET开发人员(而且是一名非常初级的开发人员),下面的代码包含了很多我以前从未见过的东西,我遇到了很多麻烦。我对Lambda表达式有基本的了解Vb.net 这个代码到底是做什么的?(C#),vb.net,lambda,c#-to-vb.net,Vb.net,Lambda,C# To Vb.net,我一直在读一本C语言的书。我是一名VB.NET开发人员(而且是一名非常初级的开发人员),下面的代码包含了很多我以前从未见过的东西,我遇到了很多麻烦。我对Lambda表达式有基本的了解 public List<T> SortByPropertyName(string propertyName, bool ascending) { var param = Expression.Parameter(typeof(T), "N"); var sortExpression =
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>
}
}
公共列表SortByPropertyName(字符串propertyName,布尔升序)
{
var param=表达式参数(类型(T),“N”);
var sortExpression=Expression.Lambda
(Expression.Convert(Expression.Property(param,propertyName)),
类型(对象)),参数);
if(升序)
{
返回此.AsQueryable().OrderBy(sortExpression.ToList();
}
其他的
{
返回此.AsQueryable().OrderByDescending(sortExpression).ToList
}
}
有人能告诉我这段代码在做什么,使用了什么概念吗?
我还尝试将此代码转换为VB.NET,但运气不好,因此也希望您能提供帮助。总的来说,此代码按照指定的属性名称按升序或降序对某些内容(可能是列表?)进行排序。在该类的其他地方必须已经指定了泛型类型
T
代码通过调用Expression.Parameter
创建一个新的ParameterExpression
,然后将该参数传递到Expression.Lambda
函数,该函数创建一个新的Lambda表达式
然后使用此表达式通过调用OrderBy
或OrderByDescending
函数对列表进行排序(该选项取决于升序
参数),并将排序后的列表作为新的列表
返回
我现在不在VisualStudio前面,但对于您来说,这应该是一个非常接近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
另请参见:是我还是代码被破坏?T在哪里定义?@Mike:我假设它在泛型类中,可能是从列表继承的东西。谢谢你的回答Adam。我遇到的主要问题是这行代码:var sortExpression=Expression.Lambda(Expression.Convert(Expression.Property(param,propertyName),typeof(object)),param);你做什么?它是说一个泛型函数将由表达式.Lambda()返回吗?嗯…VS2008似乎不喜欢:“return Me.AsQueryable(Of t).OrderBy(Of t,Object)(sortExpression).ToList()”我试过:return Queryable.AsQueryable(Of t)(Me).OrderBy(sortExpression).ToList(),似乎是这样的,虽然我不确定它是否在做同样的事情!