c# - 从属于一个对象的所有列表中获取元素总数

标签 c# linq

我得到了一些代码,其中包含由不同类型的列表组成的对象。我的意思的一个简单例子:

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/

相关文章:

Linq 表达式语法 - 如何使其更具可读性?

C# Linq - 无法将 IEnumerable<string> 隐式转换为 List<string>

c# - 在 linq to entities where 子句中建立两个列表之间的链接

c# - 以编程方式更新时防止 UI 控件上的循环事件链

c# - IIS6 应用程序池状态

c# - 这个图案叫什么?

c# - ModelState 错误 - Newtonsoft.Json.JsonSerializationException : Cannot populate list type System.Net.TrackingStringDictionary

c# - 寻找一个 HTTPHandler 来动态修改页面以指向 CDN

c# - 在 LINQ 中解构包含 ValueTuple 的容器

c# - Linq 查询中的匿名类型与元组,性能注意事项