有没有办法把这些几乎一模一样的类合二为一呢?这个问题的后续问题:为什么Nullable被认为是一个结构而不是一个类?我有两个类,它们基本上使用内部对象维护用户提供的值的元组。当用户提供的值的类型是原始类型时,我必须将其包装在Nullable中,以便它可以在元组中取空值。publicclassBundledClasswhereT:class{privateTuple_bundle;publicTValue{get{return_bundle==null?空:_bundle.Item1;}set{_bundle=newTuple(value,internalObj);}}//...publicclassBundledPrimitivewhereT:struct{privateTuple_bundle;公T?值{获取{返回_bundle==null?空:_bundle.Item1;}set{_bundle=newTuple(value,internalObj);}}//..如果我可以使用可以将基元或类作为类型参数的类来执行此操作,我会更喜欢它,但我没有看到任何解决方法。并非没有提出某种包装任何类型(不仅仅是T:struct类型)的自定义Nullable类,以确保始终可以为Value分配一个值;似乎我至少应该能够将后一个类定义为publicclassBundledPrimitive:BundledClass{}但即使这样也失败了,因为Nullable不符合:class约束(根据链接的问题)。如果你只是这样设计你的类:publicabstractclassBundled{privateTuple_bundle;publicTValue{get{return_bundle==null?默认(T):_bundle.Item1;}set{_bundle=newTuple(value,internalObj);然后,您可以通过将类型参数指定为Nullable,将其与结构一起使用,例如:Bundledfoo;//处理类Bundledbar;//handlesstructs此处唯一的问题是用户可能会将此类与不可为null的结构一起使用-例如Bundled。如果您的应用程序确实有问题,您可以声明更具体的子类型,如下所示:这将确保用户不会创建自定义子类型来绕过BundledClass/BundledStruct包装器。我能想到的最好的。依旧是两个类,但是让我免去了几百行代码重复:以上是C#学习教程:有没有办法把这些几乎相同的类合并为一个?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicabstractclassBundled{protectedTuple_bundle;公共抽象T值{得到;放;}//...其他一切}publicclassBundledClass:BundledwhereT:class{publicsealedoverrideTValue{get{return_bundle==null?空:_bundle.Item1;}set{_bundle=newTuple(value,internalObj);}}}publicclassBundledPrimitive:BundledwhereT:struct{publicsealedoverrideT?值{获取{返回_bundle==null?空:_bundle.Item1;}set{_bundle=newTuple(value,internalObj);}}}本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
