Csharp/C#教程:将公共属性约束到List 中的特定类型分享


将公共属性约束到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

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

精彩推荐