gpt4 book ai didi

c# - 列表 还是 BusinessObjectCollection?

转载 作者:IT王子 更新时间:2023-10-29 03:53:08 25 4
gpt4 key购买 nike

在 C# 泛型出现之前,每个人都会通过创建一个实现了 IEnumerable 的集合基础来为其业务对象编写集合代码

即:

public class CollectionBase : IEnumerable

然后将从中派生出他们的业务对象集合。

public class BusinessObjectCollection : CollectionBase

现在有了通用列表类,有人会直接使用它吗?我发现我使用了两种技术的折衷方案:

public class BusinessObjectCollection : List<BusinessObject>

我这样做是因为我喜欢强类型名称,而不是仅仅传递列表。

的方法是什么?

最佳答案

我通常倾向于直接使用 List,除非出于某种原因我需要封装数据结构并提供其功能的有限子集。这主要是因为如果我没有特定的封装需求,那么这样做只是浪费时间。

但是,随着 C# 3.0 中聚合初始化功能的出现,在一些新情况下我会提倡使用自定义集合类。

基本上,C# 3.0 允许任何实现 IEnumerable 的类并且有一个 Add 方法来使用新的聚合初始化语法。例如,因为 Dictionary 定义了一个方法 Add(K key, V value) ,所以可以使用以下语法初始化字典:

var d = new Dictionary<string, int>
{
{"hello", 0},
{"the answer to life the universe and everything is:", 42}
};

该功能的优点在于它适用于具有任意数量参数的添加方法。例如,给定这个集合:

class c1 : IEnumerable
{
void Add(int x1, int x2, int x3)
{
//...
}

//...
}

可以像这样初始化它:

var x = new c1
{
{1,2,3},
{4,5,6}
}

如果您需要创建复杂对象的静态表,这将非常有用。例如,如果您只是使用 List<Customer>并且您想创建一个客户对象的静态列表,您必须像这样创建它:

var x = new List<Customer>
{
new Customer("Scott Wisniewski", "555-555-5555", "Seattle", "WA"),
new Customer("John Doe", "555-555-1234", "Los Angeles", "CA"),
new Customer("Michael Scott", "555-555-8769", "Scranton PA"),
new Customer("Ali G", "", "Staines", "UK")
}

但是,如果您使用像这样的自定义集合:

class CustomerList  : List<Customer>
{
public void Add(string name, string phoneNumber, string city, string stateOrCountry)
{
Add(new Customer(name, phoneNumber, city, stateOrCounter));
}
}

然后您可以使用以下语法初始化集合:

var customers = new CustomerList
{
{"Scott Wisniewski", "555-555-5555", "Seattle", "WA"},
{"John Doe", "555-555-1234", "Los Angeles", "CA"},
{"Michael Scott", "555-555-8769", "Scranton PA"},
{"Ali G", "", "Staines", "UK"}
}

这样做的优点是更易于键入和阅读,因为它们无需为每个元素重新键入元素类型名称。如果元素类型很长或很复杂,则优势会特别大。

也就是说,这仅在您需要应用中定义的静态数据集合时才有用。某些类型的应用程序(例如编译器)一直在使用它们。其他人,例如典型的数据库应用程序,因为它们从数据库加载所有数据。

我的建议是,如果您需要定义对象的静态集合,或者需要封装集合接口(interface),那么创建一个自定义集合类。否则我只会使用 List<T>直接。

关于c# - 列表 <BusinessObject> 还是 BusinessObjectCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com