我对收藏概念很陌生。我有一个类对象(Officer
),它有几个属性,其中三个构成了军官的名字。
我还有一个名为Company
的单独的类对象,它位于Officer
对象的上方。 company
包含一系列官员,因此要显示官员的姓名,我需要在两者之间采用某种形式的参考:
private List<Officer> officerList;
public void addOfficer(Officer off)
{
officerList.Add(off);
}
现在,要将该数据实际返回到另一个类,我需要创建一个列表(无意义),创建大量Officer
个对象(效率低下),或者返回一个集合。
public void getOfficerNames(out *something* names) //I want to use a collection
//here... I think
{
foreach (Officer o in officerList)
{
names = o.Title
+ o.ForeName
+ o.SurName;
}
}
据我所知,因为我很难理解
a)如何实施收集和
b)如果做对了。
答案 0 :(得分:7)
您不需要out
来修改reference type passed to a function,所以这就足够了:
public void GetOfficerNames(List<string> names)
{
foreach (Officer o in officerList)
{
names.Add(o.Title + o.ForeName + o.SurName);
}
}
此外,只返回名称会更具可读性:
public IEnumerable<string> GetOfficerNames()
{
return officerList.Select(o => o.Title + o.ForeName + o.SurName);
}
然后你可以像这样使用它:
var names = new List<string>();
//...
names.AddRange(GetOfficerNames());
或者只是:
var names = GetOfficerNames().ToList();
out
主要用于make them being passed by reference的值类型。但是,如果需要初始化它们,它也可以与引用类型一起使用。因此,在您的情况下,示例将如下所示:
public void GetOfficerNames(out List<string> names)
{
names = new List<string>();
foreach (Officer o in officerList)
{
names.Add(o.Title + o.ForeName + o.SurName);
}
}
然后会像这样使用:
List<string> officerNames; // uninitialized
GetOfficerNames(out officerNames);
foreach (var name in officerNames) // out guarantees officerNames
{ // will be initialized here
//...
}
然而,这很少需要,不是很易读,因此不鼓励,很少使用。
答案 1 :(得分:3)
您是否考虑过将字符列表作为字符串返回?
public List<string> getOfficerNames()
{
List<string> names = new List<string>;
foreach (Officer o in officerList)
{
names.Add(o.Title + o.ForeName + o.SurName);
}
return names;
}
答案 2 :(得分:1)
如果您希望字符串中的每个人员姓名都可以作为枚举或列表访问,我认为您可以更好地将其作为枚举
public IEnumerable<string> getOfficerNames() //I want to use a collection
//here... I think
{
foreach (Officer o in officerList)
{
yield return o.Title + " " + o.ForeName + " "+ o.SurName;
}
}