C# 可能返回数组的泛型属性是否可以接受?

C# 可能返回数组的泛型属性是否可以接受?,c#,generics,C#,Generics,根据,属性不应返回数组。这是如何与泛型交互的?如果数组是泛型允许的类型,那么我是否应该生成类似于T GetValue()和SetValue(T value)的函数,而不是T value{get;set;}?此规则不是绝对的。理解它来自何处:返回数组的属性实际上需要创建数组的副本,以便调用方可以改变其副本,而不会进入对象内部状态 如果您处理的是泛型代码,那么泛型代码对具体的T一无所知。它不依赖于它的内部结构。因此,坚持这一规则无济于事。将数组传入和传出泛型代码是完全可以接受的 实用示例:一个列表

根据,属性不应返回数组。这是如何与泛型交互的?如果数组是泛型允许的类型,那么我是否应该生成类似于
T GetValue()
SetValue(T value)
的函数,而不是
T value{get;set;}

此规则不是绝对的。理解它来自何处:返回数组的属性实际上需要创建数组的副本,以便调用方可以改变其副本,而不会进入对象内部状态

如果您处理的是泛型代码,那么泛型代码对具体的
T
一无所知。它不依赖于它的内部结构。因此,坚持这一规则无济于事。将数组传入和传出泛型代码是完全可以接受的

实用示例:一个
列表


除此之外,Servy正确地指出,创建获取/设置值的方法并没有真正减轻规则推理中描述的影响。

创建获取/设置值的方法并没有真正减轻规则推理中描述的影响。从未真正考虑过这一点。当我不希望将内部集合添加到或从中删除时,我总是返回一个数组。也许,我应该开始使用ReadOnlyCollection。@Servy:虽然这是事实,但大多数程序员在循环中使用诸如GetValueT()[x]之类的构造之前都会考虑一下。@RobinHood70您真的要在这里复制整个数组吗?@RobinHood70在一般情况下没有类似的指导原则。它们总是依赖于上下文。