我需要将多维数组实现为公共属性。 我将锯齿状数组用于初始实现:
public int[][] ArrayProperty
{get; set;}
但是,它给了我一个代码分析错误-'CA1819:PropertiesShouldNotReturnArrays'
所以我想将其更改为嵌套列表,如:
public List<List<int>> ArrayProperty
{get;set;}
但是我很确定它将给另一个代码分析错误,即不嵌套泛型类型。 另外,如果我将其更改为“列表”,我希望它是只读的,并具有备份专用字段。
如何更新我的财产结构,使其具有最佳实施方式以满足我的要求?
答案 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; }
}
}
}