将多维数组属性公开为公开的最佳方法?

时间:2018-09-25 05:10:18

标签: c# arrays .net

我需要将多维数组实现为公共属性。 我将锯齿状数组用于初始实现:

public int[][] ArrayProperty
{get; set;}

但是,它给了我一个代码分析错误-'CA1819:PropertiesShouldNotReturnArrays'

所以我想将其更改为嵌套列表,如:

public List<List<int>> ArrayProperty
{get;set;}

但是我很确定它将给另一个代码分析错误,即不嵌套泛型类型。 另外,如果我将其更改为“列表”,我希望它是只读的,并具有备份专用字段。

如何更新我的财产结构,使其具有最佳实施方式以满足我的要求?

3 个答案:

答案 0 :(得分:1)

.NET Framework通常通过创建自定义集合类来解决此问题。这样,可以验证数据,提供自定义方法并且类型名称可以使代码更易于理解。

class MyCollection : IList<int[]> { ... }

您甚至可以更进一步包装int[]

//alterantively add an indexer instead of exposing the array
class MyThing { public int[] MyValues { get; set; } }

class MyCollection : IList<MyThing> { ... }

这可能是很多工作。如果您正在编写一个供其他人使用的库,那么值得付出努力。如果是内部代码,我会选择任何方便的方式。您可以稍后更改它,因为您正在控制所有呼叫者。

答案 1 :(得分:0)

1. List<KeyValuePair<string, string>>
2. Dictonary<string, Dictonary<string,string>>

尝试使用以上两个。

答案 2 :(得分:0)

“属性不应返回数组。”

Microsoft文档参考here

解决方案是实现自定义getter。

  

如果您希望允许类的使用者修改属性,则以下代码显示了一个法律示例:

using System;
using System.Collections.ObjectModel; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private Collection<string> _Pages;         

        public Book(string[] pages)        
        {            
            _Pages = new Collection<string>(pages);        
        }         

        public Collection<string> Pages        
        {            
            get { return _Pages; }        
        }    
    }
}