Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 这个代码到底是做什么的?(C#)_Vb.net_Lambda_C# To Vb.net - Fatal编程技术网

Vb.net 这个代码到底是做什么的?(C#)

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 =

我一直在读一本C语言的书。我是一名VB.NET开发人员(而且是一名非常初级的开发人员),下面的代码包含了很多我以前从未见过的东西,我遇到了很多麻烦。我对Lambda表达式有基本的了解

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(),似乎是这样的,虽然我不确定它是否在做同样的事情!