如何将对象列表传递给不能更改对象属性的方法?

问题描述 投票:1回答:1
class Program
{
    static void Main(string[] args)
    {
        var users = new List<User>();
        users.Add(new User { Id = 0, Score = 1 });
        users.Add(new User { Id = 1, Score = 1 });

        Func1(users, 2);
        Func1(new List<User>(users), 3);
        Func1(users.AsReadOnly().ToList(), 4);

        Func2(ref users, 5);
    }
    static void Func1(List<User> u, int q) { u[0].Score = q; }
    static void Func2(ref List<User> u, int q) { u[0].Score = q; }
}
class User
{
    public int Id { get; set; }
    public int Score { get; set; }
}

我不希望在Func1Func2中更改“Score”属性。 “Score”属性只能在Main()方法中更改。怎么做?

c# list
1个回答
8
投票

接口。

创建一个User实现的IUser接口,并为其赋予一个属性Score,其中只有一个getter,而不是一个setter。使函数采用IUser而不是User的列表。

Main将创建User,因此可以修改得分,而Func1和Func2只能访问getter,而无法修改它。

© www.soinside.com 2019 - 2024. All rights reserved.