将公共属性约束到List 中的特定类型
我的原始问题与特定类型的Constrain类型基本相同。
我想要完成的基本上就是这个。
public List MyPublicProperty { get; set; } where T IMyCustomInterface
现在阅读上面的问题我可以看出它显然是不可能的。
为了让您了解上下文,我正在构建一个旨在支持多种类型的解析器(假设它们实现了特定的接口),但我没有对它可能解析的数据类型进行编译类型假设。 它只是提供一个受支持的类型列表,应该能够自动计算其余的类型。
基本上我想知道的是,对于这样的属性(如果存在的话),除了运行时类型检查时(除了运行时类型检查时)是什么?
编辑:建议的解决方案似乎不起作用。
我最终得到的代码如下:
public class CustomSerializableTypeList : List where T : ITcpSerializable { } CustomSerializableTypeList myCustomTypes = new CustomSerializableTypeList();
并收到以下错误:
类型’System.Type’不能在generics类型或方法’CustomSerializableTypeList’中用作类型参数’T’。 没有从’System.Type’到’ITcpSerializable’的隐式引用转换。
一旦我查看并考虑已建议的generics实现,该错误就非常有意义。
必须有办法解决这个问题。
我想你需要自己的列表实现来包装List
。 也许是这样的:
public class TypeList where T : class { private readonly List list = new List (); public void Add(Type item) { if(!typeof(T).IsAssignableFrom(item)) { throw new InvalidOperationException(); } list.Add(item); } }
当然,您可能希望实现IList
,然后简单地将方法委托给list
。
您可以定义从List
派生的新集合类型CustomList
并添加类型约束,然后使用它来代替类中的List
。
public class CustomList : List where T : ICustomInterface { ... }
请注意:我不打算提供实现特定类型的List OF实例。 我希望提供一个实现特定接口的类型列表。
没有快速’n’简单的方法来做到这一点。 你必须实现自己的集合类,重写add方法,然后检查类型是否通过reflection实现你的接口…
上述就是C#学习教程:将公共属性约束到List 中的特定类型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
class myTypeCollection : List { override void Add(Type t) { if (t.GetInterface(typeof(MyCustomInterface)) == null) throw new InvalidOperationException("Type does not implement MyCustomInterface"); base.Add(t); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1024039.html