Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将集合属性设置为只读的最佳方法_C#_.net_Architecture - Fatal编程技术网

C# 将集合属性设置为只读的最佳方法

C# 将集合属性设置为只读的最佳方法,c#,.net,architecture,C#,.net,Architecture,集合属性 public List<MapMarker> Markers { get; set; } public List<UIReport > Reports { get; set; } 公共列表标记{get;set;} 公共列表报告{get;set;} 如果想要只读集合,请使用该类 var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray()); 如果想要只读集合,请使用该类 var coll

集合属性

public List<MapMarker> Markers { get; set; }
public List<UIReport > Reports { get; set; }
公共列表标记{get;set;}
公共列表报告{get;set;}

如果想要只读集合,请使用该类

var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray());

如果想要只读集合,请使用该类

var coll=new ReadOnlyCollection(“myreadonlycollection.ToCharArray());

要防止客户端分配全新的收藏,请使用私有字段(
只读
如果适用)和公共的“仅获取”属性

private readonly IList<T> _items = new List<T>();
public IList<T> Items
{
    get { return _items; }
}
private readonly IList\u items=new List();
公共物品
{
获取{return\u items;}
}
要防止客户端分配全新收藏并修改您的收藏,请使用
IReadOnlyCollection

publicmyclass()
{
List=//新列表
_项目=新的只读集合(列表);
}
私有只读iReadOnly集合项目;
公共IReadOnlyCollection项目
{
获取{return\u items;}
}

将列表作为
IEnumerable
返回不是一个非常可靠的选项。客户机可以简单地将可枚举项向下转换回列表,然后进行变异。您应该将可变列表包装在一个
ReadOnlyCollection

中,以防止客户端分配一个全新的集合,使用一个私有字段(
readonly
如果适用)和一个公共get only属性

private readonly IList<T> _items = new List<T>();
public IList<T> Items
{
    get { return _items; }
}
private readonly IList\u items=new List();
公共物品
{
获取{return\u items;}
}
要防止客户端分配全新收藏并修改您的收藏,请使用
IReadOnlyCollection

publicmyclass()
{
List=//新列表
_项目=新的只读集合(列表);
}
私有只读iReadOnly集合项目;
公共IReadOnlyCollection项目
{
获取{return\u items;}
}
将列表作为
IEnumerable
返回不是一个非常可靠的选项。客户机可以简单地将可枚举项向下转换回列表,然后进行变异。您应该将可变列表包装在一个类似这样的
只读集合中

public List<MapMarker> Markers { get; private set; }
public List<UIReport > Reports { get; private set; }
公共列表标记{get;private set;}
公共列表报告{get;private set;}
像这样的东西

public List<MapMarker> Markers { get; private set; }
public List<UIReport > Reports { get; private set; }
公共列表标记{get;private set;}
公共列表报告{get;private set;}

您的意思是将收藏的设定者私有化;或者将集合中的所有可能属性设置为只读?通过
只读
,您的意思是阻止类分配全新集合吗?或阻止客户端从该集合中添加/删除项目?或者两者都可以?如果不希望有人错误地添加或删除项目,可以返回
IEnumerable
。定义“只读”在不同的上下文中可以表示不同的内容。是否要阻止
myClass.Makers=someVal
myClass.Makers.Add(someVal)
,或
myClass.Makers[0]。SomeProp=someVal
@TimSchmelter返回IEnumerable不会阻止某人检测基础类型并将其强制转换回列表。您的意思是将集合的设置程序设置为私有;或者将集合中的所有可能属性设置为只读?通过
只读
,您的意思是阻止类分配全新集合吗?或阻止客户端从该集合中添加/删除项目?或者两者都可以?如果不希望有人错误地添加或删除项目,可以返回
IEnumerable
。定义“只读”在不同的上下文中可以表示不同的内容。是否要阻止
myClass.Makers=someVal
myClass.Makers.Add(someVal)
,或
myClass.Makers[0]。SomeProp=someVal
@TimSchmelter返回IEnumerable不会阻止某人检测到基础类型并将其强制转换回列表。