任何从其他类型参数推断出某些类型参数的方法'c#中的约束

本文关键字:类型参数 约束 方法 推断出 任何 其他 | 更新日期: 2023-09-27 18:17:00

假设我有以下代码:

interface IWidget
{
}
interface IWidgetFactory<TWidget>
    where TWidget : IWidget
{
}
TWidgetFactory CreateFactory<TWidgetFactory, TWidget>()
    where TWidgetFactory : IWidgetFactory<TWidget>
    where TWidget : IWidget
{
    return ...
}

每当我调用CreateFactory()时,我必须传递TWidgetFactory和TWidget类型参数。这似乎没有必要,因为TWidgetFactory已经有了一个约束,任何对它的专门化都必须已经指定TWidget。是否有任何方法可以在调用CreateFactory()时自动推断TWidget,即使我必须为它添加某种额外的辅助方法?

(上面是一个简单的例子,但在实践中可能会变得更加复杂,所以这可以节省很多复杂性。)

任何从其他类型参数推断出某些类型参数的方法'c#中的约束

没有看到CreateFactory的身体,很难告诉你在做什么。根据返回类型,我怀疑CreateFactory实际上并没有使用TWidget做任何事情,而是作为接口的类型参数。在这种情况下,您可以稍微放松一下通用约束吗?

interface IWidget
{
}
interface IWidgetFactory {} // A new non-generic base interface
interface IWidgetFactory<TWidget> : IWidgetFactory
    where TWidget : IWidget
{
}
// Generic constraints wind up not as specific, 
// but still provide some level of restriction
// TWidget can no longer be used within this method.
TWidgetFactory CreateFactory<TWidgetFactory>()
    where TWidgetFactory : IWidgetFactory
{
    return ...
}