C#自定义带索引器的集合类如何实现直接赋值给List<int>变量
要实现MyCollection实例直接赋值给List<int>类型变量,只需要在类中定义隐式类型转换运算符即可,具体修改方案如下:
修改后的完整代码
class MyCollection { private List<int> internalCollection = new List<int>(new int[] { 1, 2, 3, 4, 5}); public int this[int i] { get { return internalCollection[i]; } set { internalCollection[i] = value; } } // 新增隐式类型转换规则 public static implicit operator List<int>(MyCollection collection) { // 方案1:返回内部集合副本(更推荐,符合封装原则,外部修改不会影响类内部状态) return new List<int>(collection.internalCollection); // 方案2:直接返回内部集合实例(外部修改会同步到类内部,仅适合需要状态同步的特殊场景) // return collection.internalCollection; } }
补充说明
- 上述代码中
implicit关键字表示这是隐式转换,完全匹配你给出的l = m直接赋值的用法 - 如果后续需要限制必须显式强制转换才能得到
List<int>,只需要把implicit替换为explicit,使用时写l = (List<int>)m即可
内容的提问来源于stack exchange,提问作者Švandič
相关产品推荐
相关产品推荐

