[C#] كيف يمكنني تعيين معلمة إلى Guid.Empty في C #؟


Answers

Guid.Empty يكافئ new Guid() ، وهو ما يعادل default(Guid) . لذلك يمكنك استخدام:

public void Problem(Guid optional = default(Guid))

أو

public void Problem(Guid optional = new Guid())

لاحظ أن قيمة new Foo() قابلة للتطبيق فقط في الحالات التالية :

  • كنت حقا استدعاء منشئ غير المعلمة
  • Foo هو نوع القيمة

وبعبارة أخرى ، عندما يعلم المجمع أنه في الواقع فقط القيمة الافتراضية للنوع :)

(من المثير للاهتمام ، أنا متأكد بنسبة 99.9٪ من أنه لن يتصل بأي منشئ new Foo() مخصص قد تكون قمت بإنشائه. لا يمكنك إنشاء مثل هذا المُنشئ في نوع قيمة في C # ، ولكن يمكنك القيام بذلك في IL.)

يمكنك استخدام الخيار default(Foo) لأي نوع.

Question

أود أن أقول:

public void Problem(Guid optional = Guid.Empty)
{
}

لكن المترجم يشتكي من أن Guid.Empty ليس ثابتًا زمنيًا للوقت.

بما أنني لا أرغب في تغيير واجهة برمجة التطبيقات ، لا يمكنني استخدام:

 Nullable<Guid>



لا تعمل الإجابة المقبولة في ASP.NET MVC ، وتتسبب في خطأ وقت التشغيل هذا:

[ArgumentException: The parameters dictionary contains a null entry for parameter 'optional' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Problem(System.Guid)' ....

بدلاً من ذلك ، يمكنك القيام بما يلي:

public void Problem(Guid? optional)
{
    if (optional == null)
    {
        optional = new Guid();
    }
}