我有一个私有HashSet<string>,它是只读属性的后备字段,它应该返回一个只读集合,以便调用者不能修改集合.所以我试着:
public class MyClass
{
private readonly HashSet<string> _referencedColumns;
public ICollection<string> ReferencedColumns {
get { return new ReadOnlyCollection<string>(_referencedColumns); }
}
Run Code Online (Sandbox Code Playgroud)
这不会编译为ReadOnlyCollection接受a IList<T>未实现的HashSet<T>.还有另一个包装我可以用来拯救我复制这些物品吗?为了我的目的,只需返回实现ICollection<T>(而不是IList<T>)实现的东西即可HashSet<T>.
我的类包含一个Dictionary<T, S> dict,我想公开一个ReadOnlyCollection<T>键.如何在不复制Dictionary<T, S>.KeyCollection dict.Keys数组然后将数组暴露为数组的情况下执行此操作ReadOnlyCollection?
我希望它 ReadOnlyCollection是一个合适的包装器,即.反映基础字典中的变化,据我所知,将集合复制到数组将不会这样做(以及看似效率低下 - 我实际上并不想要新的集合,只是为了公开基础的密钥集合.. ).任何想法将不胜感激!
编辑:我正在使用C#2.0,因此没有.ToList(轻松)可用的扩展方法.
List<string> myList我的班级里有一个我想要只为班级用户阅读.
List<strign> myList {get;}
private void SetListValue()
{
myList = new List<string>();
myList.Add("ss");
}
Run Code Online (Sandbox Code Playgroud)
像这样我认为我可以myList在我的私有成员中设置我的类中的值,并为类用户提供readonly.但我意识到以这种方式宣布它我无法设置任何价值.
public class Order
{
public int Id {get;set;}
[DisplayName("User")]
public long UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
同 IEnumurable
public class User
{
public int Id{get;set;}
public virtual IEnumerable<Order> Orders { get; set; }
}
public User GetWithOrders()
{
var myUser=UserRepository.GetByEmail("email@email.com");
myUser.Orders=OrderRepository.GetByUserId(myUser.Id);
return myUser;
}
Run Code Online (Sandbox Code Playgroud)
同 ICollection
public class User
{
public int Id{get;set;}
public virtual ICollection<Order> Orders { get; set; }
}
public …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework repository-pattern ef-code-first