繁体   English   中英

具有“通配符”的C#泛型

[英]C# Generics with 'Wildcards'

我正在寻找一种使通配符在.NET泛型中工作的方法。

我的代码如下:

private class Rule<TSource, TSelected> where TSource : class where TSelected : class
{
    // stuff in here
}

我希望能够创建规则列表<> ,其中TSource将相同,但TSelected可能不同。

您需要IRule<TSource, in TSelected>创建一个IRule<TSource, in TSelected> 逆的通用接口 IRule<TSource, in TSelected>并列出该列表,此外TSelected将被限制在某个有意义的类中。 可以像现有代码中那样约束任何引用类型,但是您将无法对TSelected进行任何有意义的处理。

目前,没有其他方法可以使用变体泛型(除非您当然使用List<dynamic>或等效的方法进入反射模式),因此,如果此解决方案对您不起作用,则需要重新设计。

如果我没看错你的问题,我认为你必须这样做:

public interface ISelected
{
    // ISelected interface
}

// A TSelected implementation
public class Implementation1: ISelected { }
// Another
public class Implementation2 : ISelected { }

// our Rule
private class Rule<TSource, TSelected> where TSource : class where TSelected ISelected
{
}

如果TSelected类具有相同的超类,则只需列出Rule<TSource, TSelectedSuperClass> 我相信您可以在再次读取TSelected对象之后使用typeof( http://msdn.microsoft.com/zh-cn/library/58918ffs ( TSelected ) .aspx )获取确切的子类。

或者,您可以使容器类既包含容器类,又存储确切类型。

接口可以代替超类来实现。 但是,如果使用Selected共享实现,则我更喜欢抽象类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM