有没有办法通过另一个类访问列表元素属性

时间:2017-03-09 07:37:23

标签: c# arrays

我有以下代码:

public class settings
{
    public appConfig conf = new appConfig();

    public void getUserID(int listIndex, int newID)
    {
        conf.users[listIndex].ID = newID;
    }

    private class appConfig {
        public List<user> users;

        public appConfig()
        {
            users = new List<user>();
        }
    }
}

public class user {
    public int ID;
}

所以使用该代码我使用

var set = new settings();
set.setUserID(0, 20);

如何更改代码,以便我可以像这样访问它:

var set = new settings();
set.userPropertys(listIndex).ID = newID;

我应该如何声明userPropertys?它是一种方法还是一种新的类或什么?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要一种方法来检索setUserID()对象并直接修改其属性,而不必调用user方法。至少有两种显而易见的方法(为了清晰起见,代码中拼写错误的名称):

public class settings {
    public config conf = new config();
    public void setUserID(int listIndex, int newID) {
        conf.users[listIndex].ID = newID;
    }

    public user userPropertys(int index) { return conf.users[index]; }

    private class config {
        public List<user> users;
    }
}

像这样使用:

set.userPropertys(listIndex).ID = newID;

即。正如你在问题中展示的那样。

...或

public class settings {
    public config conf = new config();
    public void setUserID(int listIndex, int newID) {
        conf.users[listIndex].ID = newID;
    }

    public List<user> userPropertys { return conf.users; }

    private class config {
        public List<user> users;
    }
}

像这样使用:

set.userPropertys[listIndex].ID = newID;

即。与方括号索引器语法一起使用。

请注意,唯一的&#34;修复&#34;我对原始代码的操作是将config类型添加到conf字段声明中。您不会显示config.users字段的任何实际初始化,如果您希望访问List<user>对象,那么这当然是您需要的。我同意Jon关于命名约定和公开(或者更确切地说,不公开)字段作为公共成员的建议。

答案 1 :(得分:2)

是的,如果userPropertys是返回类型为user的对象的方法,则可以这样做。如果是这样,签名将是这样的:

public user userPropertys(int listIndex)
{
   return conf.users[listIndex];
}

用法如下:

int listIndex = 0;
int newID = 12;
var set = new settings();
set.userPropertys(listIndex).ID = newID ;

请您在此working Example

的帮助下验证此建议