У меня есть 2 метода расширения, которые конвертируют документ MongoDB в объект/объект.
public static ProductTemplate Convert(this Document document)
{
return null;
}
public static Product Convert(this Document document)
{
return null;
}
Это дает ожидаемую двусмысленную ошибку вызова, поэтому мне было интересно, как я могу это исправить?
Дружественные приветствия,
Pickels
Функции не могут быть перегружены с помощью типа возврата. Вам нужно будет переименовать свои функции, возможно,:
ConvertToProductTemplate() а также ConvertToProduct()
или превратить их в одну функцию, которая возвращает общий базовый класс или интерфейс. (Но тогда вызывающему нужно будет сделать бросок, когда они получат ваш результат)
Вы можете сделать свой метод Convert
общим:
public static T ConvertTo<T>(this Document doc) where T : SomeBaseClassOrInterface
{
return null;
}
Затем используйте его так:
var document = new Document();
var temp = document.ConvertTo<ProductTemplate>(); // returns a ProductTemplate
var prod = document.ConvertTo<Product>(); // returns a Product
вы можете изменить имена:
public static ProductTemplate ConvertToProductTemplate(this Document document)
{
return null;
}
public static Product ConvertToProduct(this Document document)
{
return null;
}
Convert
.
У меня такое чувство, что классы Продукт и ProductTemplate связаны как-то (например, Продукт расширяет ProductTemplate). Если я прав, вы можете просто вернуть базовый класс ( ProductTemplate в этом случае).
Tomas Lycken предложил использовать общий метод, который, на мой взгляд, неплохая идея, но если есть общий интерфейс для Product и productTemplate, вы можете просто вернуть этот интерфейс, а не Продукт и ProductTemplate.
Пример (по Томасу Ликену):
public static T ConvertTo<T>(this Document doc) where T : SomeBaseClassOrInterface
{
return null;
}
Пример (по мне):
public static SomeBaseClassOrInterface ConvertTo(this Document doc)
{
return null;
}
И если нет общего интерфейса и вы не хотите создавать новый, просто измените имена:)