我有奇怪的情况,我无法解释,有人可以帮我理解吗? 据我所知,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; }
}
答案 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);