بخلاف استعلامات LINQ, كيف يمكنك استخدام مجهول أنواع في C# ؟

StackOverflow https://stackoverflow.com/questions/168150

  •  03-07-2019
  •  | 
  •  

سؤال

لقد كنت تحاول الحصول على ما يصل الى سرعة على بعض من أحدث الميزات في C# و واحد منهم أنه لم يكن لدي مناسبة للاستخدام هو مجهول أنواع.

أنا أفهم الاستخدام لأنها تتعلق استعلامات LINQ و نظرت هذا حتى ما بعد الذي سأل سؤال مماثل.معظم الأمثلة التي رأيتها على شبكة الإنترنت هي ذات الصلة إلى استعلامات LINQ ، وهو بارد.رأيت بعض ما المفتعلة الأمثلة أيضا ولكن ليس حقا أي شيء حيث رأيت الكثير من القيمة.

هل لديك رواية استخدام مجهول أنواع حيث كنت تعتقد حقا انه يوفر لك بعض المساعدة ؟

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

المحلول

ومع قليل من التفكير، يمكنك تحويل نوع مجهول إلى قاموس <سلسلة، وجوه>. روي Osherove مدونات أسلوبه لهذا هنا: <لأ href = "http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx" يختلط = "نوفولو noreferrer"> http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

يستخدم

ويعقوب نجار أنواع غير معروفة باعتبارها وسيلة لتهيئة الأجسام الثابتة مع بناء الجملة مشابهة للاعتراض التهيئة: <لأ href = "http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2 / "يختلط =" noreferrer نوفولو "> http://jacobcarpenter.wordpress.com/2007/11/19/named-parameters-part-2/

وأنواع مجهول يمكن استخدامها كوسيلة لإعطاء الأسماء المستعارة أسهل للقراءة إلى خصائص الكائنات في جمع يجري كرر من جديد مع بيان foreach. (على الرغم من، لنكون صادقين، وهذا هو في الحقيقة ليس أكثر من استخدام معيار من أنواع مجهولة مع <لأ href = "http://msdn.microsoft.com/en-us/library/bb397919.aspx" يختلط = "نوفولو noreferrer "> LINQ إلى كائنات ) على سبيل المثال:

Dictionary<int, string> employees = new Dictionary<int, string>
{
    { 1, "Bob" },
    { 2, "Alice" },
    { 3, "Fred" },
};

// standard iteration
foreach (var pair in employees)
    Console.WriteLine("ID: {0}, Name: {1}", pair.Key, pair.Value);

// alias Key/Value as ID/Name
foreach (var emp in employees.Select(p => new { ID = p.Key, Name = p.Value }))
    Console.WriteLine("ID: {0}, Name: {1}", emp.ID, emp.Name);

وبينما ليس هناك الكثير من التحسن في هذه العينة قصيرة، إذا كانت حلقة foreach لفترة أطول، مشيرا إلى ID وName قد يحسن القراءة.

نصائح أخرى

وASP.NET MVC التوجيه يستخدم هذه الكائنات في كل مكان.

أحيانا أشك أنه قد يكون مفيدا لأداء شيء مثل وهو ينق الاستعلام ولكن لا يحدث مع استخدام LINQ - ولكن كنت لا تزال تريد إسقاط من نوع ما.أنا لا أعتقد أن استخدام مجهول أنواع في شكلها الحالي أي شيء مختلف جذريا إلى LINQ التوقعات.

شيء واحد أنا أن مثل أن يرى هو القدرة على خلق "اسمه" أنواع بسيطة الإعلانات التي من شأنها أن تولد خصائص منشئ في بنفس الطريقة مجهول أنواع ، وكذلك تجاوز يساوي/GetHashCode/ToString في نفس (المفيدة) طريقة.هذه الأنواع يمكن بعد ذلك تحويلها إلى "طبيعية" أنواع عند الحاجة إلى إضافة المزيد من السلوك نشأت.

مرة أخرى أنا لا أعتقد أن استخدامه بشكل رهيب في كثير من الأحيان - ولكن كل ذلك في كثير من الأحيان القدرة على أن تكون في متناول اليد ، خاصة في عدد قليل من الطرق فئة.هذا ربما يكون جزءا من جهد أكبر لإعطاء المزيد من الدعم ثابتة أنواع في C# 5.

لإضافة إلى ما قال القاضي، ASP.Net MVC هو المكان الأول رأيت هذه تستخدم بطرق مثيرة للاهتمام ومفيدة. وهنا مثال واحد:


Html.ActionLink("A Link", "Resolve", new { onclick = "someJavascriptFn();" })
يستخدم

وASP.Net MVC أنواع مجهولة مثل هذا لإضافة سمات التعسفية لعناصر HTML. أفترض هناك عدد من الطرق المختلفة التي يمكن أن تنجز الشيء نفسه، ولكن أنا أحب أسلوب مقتضب من أنواع مجهولة المصدر، وأنه يعطي أشياء أكثر من إحساس لغة ديناميكية.

وأكبر استخدام لأنواع مجهولة هو LINQ، في الواقع هذا هو السبب أنشئت من أجلها.

وأعتقد سبب واحد لنوع مجهول خارج LINQ هو خلق مثل البنية كائن مؤقت، منها مثلا:

var x = new { a = 1, b = 2 };

وهذا قد يجعل حياتك أسهل قليلا في بعض الحالات.

ولقد استخدمها للقيام رسائل البريد الإلكتروني قالب لأنها كبيرة إذا كنت تستخدم التفكير والأدوية.

ويمكن الاطلاع على بعض المعلومات هنا: HTTP: //www.aaron- powell.com/blog.aspx؟id=1247

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