参考类型列表<t>按顺序</t>

时间:2014-06-01 16:09:17

标签: reference sql-order-by

我有奇怪的情况,我无法解释,有人可以帮我理解吗? 据我所知,List是一个引用类型,它意味着在我们更改函数Rating里面的列表后,列表将在函数外部进行更改。但实际上我排序后它并没有改变。有什么问题我误解了吗?

class Program
{
    static void Main(string[] args)
    {
        List<User> data = new List<User> 
        { 
            new User { TotalScore = 0 }, 
            new User { TotalScore = 3 }, 
            new User { TotalScore = 4 } 
        };
        Rating(data);
        //List data doesnt order descending by TotalScore
    }

    private static void Rating(List<User> data)
    {
        data = data.OrderByDescending(e => e.TotalScore).ToList();
    }
}

public class User
{
    public int Id { get; set; }
    public decimal TotalScore { get; set; }
}

1 个答案:

答案 0 :(得分:0)

List是一个引用类型,但是你不应该将它与通过引用将参数传递给函数混淆。默认情况下,C#中的函数参数按值传递。您当前正在将data引用按值传递到Rating,因此该函数中的data变量是调用方中引用的副本。这允许函数通过引用改变相同的列表,但任何赋值只会影响局部变量。

要通过引用传递变量,您需要使用ref关键字:

private static void Rating(ref List<User> data)
{
    data = data.OrderByDescending(e => e.TotalScore).ToList();
}

并将通话更改为:

Rating(ref data);