我得到了一些代码,其中包含由不同类型的列表组成的对象。我的意思的一个简单例子:
public class Account
{
private long accountID;
private List<string> accountHolders;
private List<string> phoneNumbers;
private List<string> addresses;
public Account()
{
this.accountHolders = new List<string>();
this.phoneNumbers = new List<string>();
this.addresses = new List<string>();
}
public long AccountID
{
get
{
return this.accountID;
}
set
{
this.accountID = value;
}
}
}
对于一项要求,我需要获取每个列表中的元素总数以进行验证。我有以下有效的方法:
public class AccountParser
{
// Some code
public int CountElements(Account acct)
{
int count = 0;
count += acct.accountHolders.Count();
count += acct.phoneNumbers.Count();
count += acct.addresses.Count();
return count;
}
}
但想知道是否有更好的方法来做到这一点。我知道我可以用 Linq 枚举一个列表,但在这种情况下我似乎无法让它工作。
最佳答案
您所做的是正确的
你可以在一行中完成而不声明任何变量
public int CountElements(Account acct)
{
return acct.accountHolders.Count() + acct.phoneNumbers.Count() + acct.addresses.Count();
}
但变化不大。
列表的数量是静态的,因为类是静态的,所以如果结构不会改变,那么使用反射是没有意义的。
现在您可以拥有多个具有不同类型列表的 Account
类。在那种情况下,我会创建一个抽象的 AbsAccount
类,它有一个抽象的 CountElements 属性:
public abstract class AbsAccount
{
public abstract int CountElements { get; }
}
public class Account: AbsAccount
{
private List<string> accountHolders;
private List<string> phoneNumbers;
private List<string> addresses;
public override int CountElements
{
get
{
return this.accountHolders.Count()
+ this.phoneNumbers.Count()
+ this.addresses.Count();
}
}
}
public class AccountParser
{
// Some code
public int CountElements(AbsAccount acct)
{
return acct.CountElements;
}
}
但也许我太过分了......
关于c# - 从属于一个对象的所有列表中获取元素总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38337547/