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

Ig *_*g L 1 c# list

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; }
}
Run Code Online (Sandbox Code Playgroud)

我不希望在" Func1或"中更改"分数"属性Func2."Score"属性只能在Main()方法中更改.怎么做?

Cal*_*ury 8

接口.

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

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