首页 > 解决方案 > 仅传递一个定义其他泛型的泛型类型

问题描述

我有以下方法:

public void SomeMethod<TParser, T1, T2> () where TParser : IParser<T1, T2>, new() 
{
   ...
}

以及一个IParser<T1, T2>接口和一个实现它的类:

public interface IParser<T1, T2>
{
   ...
}

public class Parser : IParser<string, int>
{
   ...
}

现在我的问题是是否可以只传递TParser给该方法,因为有一个约束集有点定义T1T2. 那么是否可以执行以下操作:

SomeMethod<Parser>();

我想这是不可能的,但会有类似的东西吗?

标签: c#genericsgeneric-constraints

解决方案


您可以做的是定义接口的非通用版本。并从中派生您的通用接口并使用非通用版本作为约束。如果你有类型的参数, T1T2将没有用。

internal interface IParser
{
... // if you can define any. or it can be empty also
}

public interface IParser<T1, T2> : IParser
{
   ...
}

并将您的方法签名更改为:

public void SomeMethod<TParser> () where TParser : IParser new() 
{
   ...
}

推荐阅读