У меня есть такой способ:
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
, поскольку существует набор ограничений, который как бы определяет T1
и T2
. Так что можно было бы сделать что-то вроде следующего:
SomeMethod<Parser>();
Я бы предположил, что это невозможно, но было бы что-то подобное?
1 ответ
Что вы можете сделать, так это определить неуниверсальную версию вашего интерфейса. И извлеките из него свой универсальный интерфейс и используйте неуниверсальную версию в качестве ограничения. И если у вас есть параметры типа T1
и T2
, это не будет полезно.
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()
{
...
}
T1
и T2
в методе для дальнейшего приведения и обработки. Спасибо за ответ в любом случае!
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.