คำถามติดแท็ก generics

Generics เป็นรูปแบบหนึ่งของตัวแปรหลายตัวแปรที่พบในภาษาต่าง ๆ รวมถึงภาษา. NET, Java, Swift และ Rust

7
รับตัวแจงนับทั่วไปจากอาร์เรย์
ใน C # เราจะได้รับตัวแจงนับทั่วไปจากอาร์เรย์ที่กำหนดได้อย่างไร? ในโค้ดด้านล่างนี้MyArrayคืออาร์เรย์ของMyTypeวัตถุ ฉันต้องการซื้อMyIEnumeratorตามแฟชั่นที่แสดง แต่ดูเหมือนว่าฉันจะได้รับตัวแจงนับที่ว่างเปล่า (แม้ว่าฉันจะยืนยันแล้วMyArray.Length > 0ก็ตาม) MyType[] MyArray = ... ; IEnumerator<MyType> MyIEnumerator = MyArray.GetEnumerator() as IEnumerator<MyType>;

7
ไม่สามารถเชี่ยวชาญฟังก์ชันทั่วไปได้อย่างชัดเจน
ฉันมีปัญหากับรหัสต่อไปนี้: func generic1<T>(name : String){ } func generic2<T>(name : String){ generic1<T>(name) } generic1 (ชื่อ)ผลการรวบรวมข้อผิดพลาด "ไม่สามารถมีความเชี่ยวชาญอย่างชัดเจนฟังก์ชั่นทั่วไป" มีวิธีใดบ้างที่จะหลีกเลี่ยงข้อผิดพลาดนี้ ฉันไม่สามารถเปลี่ยนลายเซ็นของฟังก์ชัน generic1 ได้ดังนั้นจึงควรเป็น (String) -> Void
92 generics  swift 

4
วิธีกำหนดให้โปรโตคอลสามารถนำมาใช้โดยคลาสเฉพาะเท่านั้น
ฉันต้องการโปรโตคอลนี้: protocol AddsMoreCommands { /* ... */ } จะนำมาใช้โดยคลาสที่สืบทอดจากคลาสUIViewControllerเท่านั้น หน้านี้บอกฉันว่าฉันสามารถระบุได้ว่ามันถูกนำมาใช้โดยคลาสเท่านั้น (เมื่อเทียบกับโครงสร้าง) โดยการเขียน protocol AddsMoreCommands: class { } แต่ฉันไม่เห็นวิธีการกำหนดว่าจะต้องใช้เฉพาะคลาสใดคลาสหนึ่งเท่านั้น หน้านั้นพูดถึงการเพิ่มwhereส่วนขยายของโปรโตคอลในภายหลังเพื่อตรวจสอบความสอดคล้อง แต่ฉันไม่สามารถดูวิธีปรับเปลี่ยนได้ extension AddsMoreCommands where /* what */ { } มีวิธีทำไหม? ขอบคุณ!

9
ไม่สามารถแปลงประเภท 'Int' เป็น 'T' โดยปริยาย
โทรหาGet<int>(Stat);หรือGet<string>(Name); แต่เมื่อรวบรวมฉันจะได้รับ: ไม่สามารถแปลงประเภท 'int' เป็น 'T' โดยปริยาย stringและสิ่งเดียวกัน public T Get<T>(Stats type) where T : IConvertible { if (typeof(T) == typeof(int)) { int t = Convert.ToInt16(PlayerStats[type]); return t; } if (typeof(T) == typeof(string)) { string t = PlayerStats[type].ToString(); return t; } }
92 c#  generics 

8
ส่งวัตถุไปที่ T
ฉันกำลังแยกวิเคราะห์ไฟล์ XML กับXmlReaderคลาสใน. NET และฉันคิดว่าการเขียนฟังก์ชันการแยกวิเคราะห์ทั่วไปเพื่ออ่านแอตทริบิวต์ต่างๆโดยทั่วไปจะเป็นการดี ฉันมาพร้อมกับฟังก์ชั่นต่อไปนี้: private static T ReadData<T>(XmlReader reader, string value) { reader.MoveToAttribute(value); object readData = reader.ReadContentAsObject(); return (T)readData; } เมื่อฉันตระหนักได้ว่าสิ่งนี้ไม่ได้ผลทั้งหมดตามที่ฉันวางแผนไว้ มันแสดงข้อผิดพลาดกับประเภทดั้งเดิมเช่นintหรือdoubleเนื่องจากนักแสดงไม่สามารถแปลงจากประเภทstringเป็นตัวเลขเป็นประเภทตัวเลขได้ มีวิธีใดบ้างที่ฟังก์ชันของฉันจะเหนือกว่าในรูปแบบที่แก้ไข
91 c#  generics  casting 

9
ฉันจะตรวจสอบได้อย่างไรว่าค่าที่ระบุเป็นรายการทั่วไป?
public bool IsList(object value) { Type type = value.GetType(); // Check if type is a generic list of any type } วิธีใดที่ดีที่สุดในการตรวจสอบว่าวัตถุที่ระบุเป็นรายการหรือสามารถส่งไปยังรายการได้
91 c#  reflection  list  generics 

4
เป็นไปได้ไหมที่จะสร้างเมธอด @helper ทั่วไปด้วย Razor?
ฉันพยายามเขียนตัวช่วยใน Razor ที่มีลักษณะดังต่อไปนี้: @helper DoSomething<T, U>(Expression<Func<T, U>> expr) where T : class น่าเสียดายที่โปรแกรมแยกวิเคราะห์คิดว่านั่น<Tเป็นจุดเริ่มต้นขององค์ประกอบ HTML และฉันพบข้อผิดพลาดทางไวยากรณ์ เป็นไปได้ไหมที่จะสร้างตัวช่วยด้วย Razor ซึ่งเป็นวิธีการทั่วไป? ถ้าเป็นเช่นนั้นไวยากรณ์คืออะไร?

1
การขยายคลาสทั่วไปและใช้อินเทอร์เฟซใน Kotlin
สมมติว่าฉันต้องการตัวแปรประเภท T ที่ขยายคลาสบางคลาสและใช้อินเทอร์เฟซ สิ่งที่ต้องการ: class Foo <T : Bar implements Baz> { ... } ไวยากรณ์ของสิ่งนี้ใน Kotlin คืออะไร?
90 generics  kotlin 


4
อะไรคือจุดสำคัญของคลาสตัวเลือกของ Guava
ฉันเพิ่งอ่านเกี่ยวกับเรื่องนี้และเห็นคนที่ใช้คลาสนี้ แต่ในทุกกรณีการใช้งานnullจะได้ผลเช่นกัน - ถ้าไม่เข้าใจง่ายกว่านั้น ใครสามารถยกตัวอย่างที่เป็นรูปธรรมที่Optionalจะบรรลุสิ่งที่nullทำไม่ได้หรือในวิธีที่สะอาดกว่านี้ได้หรือไม่? สิ่งเดียวที่ฉันคิดได้คือใช้กับMapsที่ไม่ยอมรับnullคีย์ แต่ถึงอย่างนั้นก็ทำได้โดยใช้ "การแมป" ด้านข้างของค่า null ใครสามารถให้ข้อโต้แย้งที่น่าเชื่อถือกว่านี้แก่ฉันได้ไหม ขอขอบคุณ.
89 java  generics  guava 

3
วิธีใช้โปรโตคอลทั่วไปเป็นประเภทตัวแปร
สมมติว่าฉันมีโปรโตคอล: public protocol Printable { typealias T func Print(val:T) } และนี่คือการนำไปใช้งาน class Printer<T> : Printable { func Print(val: T) { println(val) } } ความคาดหวังของฉันคือฉันต้องสามารถใช้Printableตัวแปรเพื่อพิมพ์ค่าเช่นนี้: let p:Printable = Printer<Int>() p.Print(67) คอมไพเลอร์บ่นด้วยข้อผิดพลาดนี้: "โปรโตคอล" พิมพ์ได้ "สามารถใช้เป็นข้อ จำกัด ทั่วไปเท่านั้นเนื่องจากมีข้อกำหนดในตนเองหรือประเภทที่เกี่ยวข้อง ฉันทำอะไรผิดหรือเปล่า? เพื่อแก้ไขปัญหานี้หรือไม่? **EDIT :** Adding similar code that works in C# public interface IPrintable<T> { …
89 ios  xcode  generics  swift 

3
C # ใช้ System.Type เป็นพารามิเตอร์ทั่วไป
ฉันมีรายการประเภท (System.Type) ที่ต้องสอบถามในฐานข้อมูล สำหรับแต่ละประเภทนี้ฉันต้องเรียกส่วนขยายต่อไปนี้ (ซึ่งเป็นส่วนหนึ่งของ LinqToNhibernate): Session.Linq<MyType>() อย่างไรก็ตามฉันไม่มี MyType แต่ฉันต้องการใช้ Type แทน สิ่งที่ฉันมีคือ: System.Type typeOne; แต่ฉันไม่สามารถทำสิ่งต่อไปนี้ได้: Session.Linq<typeOne>() ฉันจะใช้ Type เป็นพารามิเตอร์ Generic ได้อย่างไร
89 c#  generics  .net-4.0  types 

9
วิธีการใส่รายการ <MyType>
ฉันจะทำให้สิ่งนี้ทำงานได้อย่างไร? ฉันสามารถตรวจสอบว่าแต่ไม่ถ้า(obj instanceof List&lt;?&gt;) (obj instanceof List&lt;MyType&gt;)มีวิธีนี้ไหม?
88 java  generics 

29
ยาชื่อสามัญมีประโยชน์อย่างไรทำไมต้องใช้?
ฉันคิดว่าจะเสนอซอฟต์บอลนี้ให้ใครก็ได้ที่อยากจะตีมันออกจากสวนสาธารณะ ยาชื่อสามัญคืออะไรข้อดีของยาชื่อสามัญคืออะไรทำไมฉันควรใช้มันที่ไหน? โปรดให้มันเป็นพื้นฐานพอสมควร ขอบคุณ.
87 c#  generics  types 

15
การเรียงลำดับ IList ใน C #
วันนี้ก็เลยเจอปัญหาที่น่าสนใจ เรามีบริการเว็บ WCF ที่ส่งคืน IList ไม่ใช่เรื่องใหญ่จริง ๆ จนอยากจะเรียงลำดับ ปรากฎว่าอินเทอร์เฟซ IList ไม่มีวิธีการจัดเรียงในตัว ฉันลงเอยด้วยArrayList.Adapter(list).Sort(new MyComparer())วิธีการแก้ปัญหา แต่ดูเหมือน "สลัม" สำหรับฉัน ฉันเล่นด้วยการเขียนวิธีการขยายรวมถึงการสืบทอดจาก IList และใช้วิธีการ Sort () ของฉันเองรวมถึงการแคสต์ไปยัง List แต่ไม่มีสิ่งใดที่ดูหรูหราเกินไป คำถามของฉันคือใครมีวิธีแก้ปัญหาที่สวยงามในการจัดเรียง IList
87 c#  generics  sorting  ilist 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.