سؤال

لدي 2 طرق تمديد تقوم بتحويل وثيقة MongoDB إلى كيان / كائن.

public static ProductTemplate Convert(this Document document)
{
    return null;
}

public static Product Convert(this Document document)
{
    return null;
}

هذا يعطي خطأ مكالمة غامضة متوقع لذلك كنت أتساءل كيف يمكنني إصلاح هذا؟

تحية ودية،

الملاذات

هل كانت مفيدة؟

المحلول

لا يمكن تحميل الوظائف حسب نوع العودة. سيتعين عليك إعادة تسميت وظائفك إلى ربما:

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;
}

لدي شعور بذلك المنتوج و producttemplate. الصفوف ذات الصلة بطريقة ما (على سبيل المثال المنتوج يمتد producttemplate.). إذا كنت على حق، يمكنك فقط إرجاع الفئة الأساسية (producttemplate. في هذه الحالة).

اقترح Tomas Lycken استخدام طريقة عامة، وهو في رأيي فكرة جيدة للغاية، ولكن إذا كان هناك واجهة شائعة للمنتج والمواد، يمكنك فقط إرجاع هذه الواجهة أيضا بدلا من ذلك المنتوج و producttemplate..

مثال (بواسطة Tomas Lycken):

public static T ConvertTo<T>(this Document doc) where T : SomeBaseClassOrInterface
{
    return null;
}

مثال (مني):

public static SomeBaseClassOrInterface ConvertTo(this Document doc)
{
    return null;
}

وإذا لم تكن هناك واجهة شائعة ولا تريد إنشاء واحدة جديدة، يرجى فقط تغيير الأسماء :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top