คำถามติดแท็ก generic-constraints

21
สร้างวิธีการทั่วไป จำกัด T เพื่อ Enum
ฉันกำลังสร้างฟังก์ชั่นเพื่อขยายEnum.Parseแนวคิดที่ว่า อนุญาตให้แยกวิเคราะห์ค่าเริ่มต้นในกรณีที่ไม่พบค่า Enum เป็นกรณีตาย ดังนั้นฉันจึงเขียนสิ่งต่อไปนี้: public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum { if (string.IsNullOrEmpty(value)) return defaultValue; foreach (T item in Enum.GetValues(typeof(T))) { if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item; } return defaultValue; } ฉันได้รับข้อผิดพลาดไม่สามารถเป็นคลาสพิเศษSystem.Enumได้ ยุติธรรมเพียงพอ แต่มีวิธีแก้ปัญหาเพื่อให้ Generic Enum หรือฉันจะต้องเลียนแบบParseฟังก์ชั่นและส่งประเภทเป็นแอตทริบิวต์ซึ่งบังคับให้ความต้องการมวยที่น่าเกลียดในรหัสของคุณ แก้ไขข้อเสนอแนะด้านล่างทั้งหมดได้รับการชื่นชมอย่างมากขอบคุณ ตั้งรกรากอยู่ที่ (ฉันออกจากลูปเพื่อรักษาความรู้สึกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ - ฉันใช้นี่เมื่อแยกวิเคราะห์ XML) public static class …

7
“ ชั้นเรียนพิเศษ” คืออะไร?
หลังจากล้มเหลวในการรวบรวมสิ่งต่อไปนี้: public class Gen<T> where T : System.Array { } ด้วยข้อผิดพลาด ข้อ จำกัด ไม่สามารถเป็นคลาสพิเศษได้ `` System.Array '' ผมเริ่มสงสัยว่าสิ่งที่เป็น "การเรียนพิเศษ"? ผู้คนมักจะได้รับข้อผิดพลาดประเภทเดียวกันเมื่อพวกเขาระบุSystem.Enumในข้อ จำกัด ทั่วไป ผมได้รับผลเช่นเดียวกันกับSystem.Object, System.Delegate, System.MulticastDelegateและSystem.ValueTypeมากเกินไป มีมากกว่านี้ไหม ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับ "ชั้นเรียนพิเศษ" ใน C # นอกจากนี้สิ่งที่เป็นพิเศษเกี่ยวกับการเรียนที่เราไม่สามารถใช้พวกเขาเป็นข้อ จำกัด ประเภททั่วไป?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.