Эта проблема очень сложна для объяснения, поэтому я высмеивал какой-то фиктивный код, чтобы показать проблему, с которой я столкнулся. Это связано с общими ограничениями на методы расширения. В моем методе расширения мне нужен общий класс (но пример этого не показывает). Давайте углубимся в:Почему универсальное ограничение интерфейса испортило использование методов расширения?
У меня есть два интерфейса:
public interface IOne { }
public interface ITwo { }
Теперь я создаю некоторые методы расширения для них:
public static class Extensions
{
public static string ParseValue(this ITwo ob)
{
return "Two";
}
public static string ParseValue<T>(this T obj) where T : class, IOne
{
return "One";
}
}
выглядит хорошо, верно? Теперь я создаю реализацию ITwo
, и это будет запутаться:
public class Two: ITwo
{
public string Test()
{
return this.ParseValue();
}
}
Этого класс не компилируется. Я получаю следующую ошибку:
The type 'GenericProblem.Two' cannot be used as type parameter 'T' in the generic type or method 'GenericProblem.Extensions.ParseValue(T)'. There is no implicit reference conversion from 'GenericProblem.Two' to 'GenericProblem.IOne'.
Как решить эту проблему?
См. Мой ответ [здесь] (http://stackoverflow.com/questions/23217585/generic-extension-method-resolution-fails). Думаю, это дубликат, не так ли? –
@SriramSakthivel, не уверен, вы получили то же сообщение об ошибке? –
Из связанного вопроса: * Тип «System.Collections.Generic.List» не может использоваться как параметр типа «T» в родовом типе или методе.* –