C#DAL返回通用List <t> </t>

时间:2010-12-14 20:58:18

标签: c# generics

我可以从DAL返回List吗?在互联网上,我在某处读到它并不好。 如果返回List会有什么问题?

2 个答案:

答案 0 :(得分:9)

您可以返回List<T>个对象,但该属性应该是类型 IList<T>。这将允许您更改稍后使用的列表实现,而不会破坏与针对您的库编译的现有程序集的二进制兼容性。

此示例可能与您的构造函数模式不匹配,但它演示了我的意思(通过List<T>属性返回IList<T>):

public class Foo
{
    public IList<string> AListOfStrings { get; private set; }

    public Foo()
    {
        AListOfStrings = new List<string>();
    }
}

答案 1 :(得分:0)

原则上,返回List<T>没有问题,但是一个常见的问题是当类返回违反封装的成员List<T>变量时,例如。

public class SomeClass<T>
{
    public List<T> Items { get; private set; }
    public void DoSomething()
    {
        T first = Items[0];
        ...
    }
}

在这种情况下,此类的任何客户端都可以修改其状态,这可能导致错误,因为类无法再保护其不变量。请注意,在这种情况下返回IList<T>无济于事。

但是对于数据访问对象,它(希望)不会保留任何查询的结果,因此每次都会返回列表的新副本,并且不会受到任何客户端修改的影响。

相关问题