cod*_*joe 1 .net c# ienumerable
考虑我的以下课堂专辑:
public class Album
{
public int? Id { get; set; }
public string Name { get; set; }
public IEnumerable<Photo> Photos { get; set; }
public DateTime Registered { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我没有麻烦检索数据并填充我的相册和我的照片集.
但是现在我还想在照片集中"添加"照片项目,"添加"不被视为照片上的有效方法.
'System.Collections.Generic.IEnumerable'不包含'Add'的定义,也没有扩展方法'Add'接受类型的第一个参数....
我应该怎么做才能让它与IEnumerable一起工作?我不想改变我的财产
public List<Photo> Photos { get; set;}
Run Code Online (Sandbox Code Playgroud)
我真的需要在我的Album类上实现ICollection吗?
public class Album : ICollection<Photo> { ... }
Run Code Online (Sandbox Code Playgroud)
如果您不想将属性类型更改为允许添加的内容(IList<Photo>或ICollection<Photo>)添加单独的方法来添加图片,如下所示:
public void AddPhoto(Photo p) {
...
}
Run Code Online (Sandbox Code Playgroud)
这可以让您保留IEnumerable<Photo>属性的类型,并允许验证调用者输入的内容.例如,您的代码将能够检测照片是否太大或太小,并抛出异常.如果你暴露IList<Photo>,这将是很难做到的,因为你需要提供自己的覆盖实现Add.
您还应该将auto属性的setter设为private,或者使用getter + backing字段替换auto属性.