【问题标题】:Passing only one generic type which defines the other generics仅传递一个定义其他泛型的泛型类型
【发布时间】:2019-12-21 14:01:09
【问题描述】:

我有以下方法:

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

还有一个IParser&lt;T1, T2&gt; 接口和一个实现它的类:

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

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

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

SomeMethod<Parser>();

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

【问题讨论】:

  • 不,很遗憾,这是不可能的,这是 C# 中的常见问题。
  • 那真是太可惜了……你知道有没有计划吗?

标签: c# generics generic-constraints


【解决方案1】:

您可以做的是定义接口的非通用版本。并从中派生您的通用接口并使用非通用版本作为约束。如果你有 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() 
{
   ...
}

【讨论】:

  • 好吧,这只是我实际问题的简化版本,我确实需要方法中的实际T1T2 类型以进行进一步的铸造和处理。无论如何感谢您的回答!
猜你喜欢
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2019-07-02
  • 1970-01-01
相关资源
最近更新 更多