我有以下代码:
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
?它是一种方法还是一种新的类或什么?
答案 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
的帮助下验证此建议