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

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

25
รับประเภททั่วไปของคลาสที่รันไทม์
ฉันจะบรรลุสิ่งนี้ได้อย่างไร public class GenericClass<T> { public Type getMyType() { //How do I return the type of T? } } ทุกสิ่งที่ฉันได้ลองมาแล้วจะส่งคืนประเภทเสมอObjectมากกว่าประเภทเฉพาะที่ใช้

18
รายการ <T> หรือ IList <T> [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน7 เดือนที่ผ่านมา ใครสามารถอธิบายให้ฉันทำไมฉันต้องการใช้ IList มากกว่ารายชื่อใน C #? คำถามที่เกี่ยวข้อง: เหตุใดจึงถือว่าไม่ดีที่จะเปิดเผยList&lt;T&gt;
495 c#  list  generics 


26
วิธีลบองค์ประกอบออกจากรายการทั่วไปในขณะที่วนซ้ำมัน?
ฉันกำลังมองหารูปแบบที่ดีกว่าสำหรับการทำงานกับรายการองค์ประกอบที่ต้องดำเนินการแต่ละรายการและจากนั้นผลลัพธ์จะถูกลบออกจากรายการ คุณไม่สามารถใช้.Remove(element)ภายในforeach (var element in X)(เพราะมันจะส่งผลในCollection was modified; enumeration operation may not execute.ข้อยกเว้น) ... คุณยังไม่สามารถใช้for (int i = 0; i &lt; elements.Count(); i++)และเพราะมันรบกวนตำแหน่งปัจจุบันของคุณในการเก็บรวบรวมเทียบกับ.RemoveAt(i)i มีวิธีที่สง่างามในการทำเช่นนี้หรือไม่?
451 c#  list  loops  generics  key-value 

7
จุดของตัวดำเนินการไดมอนด์ (<>) ใน Java 7 คืออะไร
ตัวดำเนินการไดมอนด์ใน java 7 อนุญาตให้ใช้โค้ดดังนี้: List&lt;String&gt; list = new LinkedList&lt;&gt;(); อย่างไรก็ตามใน Java 5/6 ฉันสามารถเขียน: List&lt;String&gt; list = new LinkedList(); ความเข้าใจของฉันเกี่ยวกับการลบประเภทคือสิ่งเหล่านี้เหมือนกันทุกประการ (ทั่วไปจะถูกลบออกที่รันไทม์อยู่แล้ว) ทำไมต้องกังวลกับเพชรเลย? ฟังก์ชั่น / ประเภทความปลอดภัยใหม่อนุญาตให้มีอะไรบ้าง ถ้ามันไม่ได้ผลการทำงานใหม่ ๆ ทำไมพวกเขาพูดถึงมันเป็นคุณสมบัติ? ความเข้าใจของฉันเกี่ยวกับแนวคิดนี้มีข้อบกพร่องหรือไม่


9
รายการ <T> คำสั่งซื้อโดยเรียงตามตัวอักษร
ฉันใช้ C # กับ Framework 3.5 List&lt;T&gt;ฉันกำลังมองหาได้อย่างรวดเร็วจัดเรียงทั่วไป เพื่อประโยชน์ของตัวอย่างนี้สมมติว่าฉันมีรายการPersonประเภทที่มีคุณสมบัติของนามสกุล ฉันจะเรียงลำดับรายการนี้โดยใช้การแสดงออกแลมบ์ดาได้อย่างไร List&lt;Person&gt; people = PopulateList(); people.OrderBy(???? =&gt; ?????)
442 c#  generics  list  lambda  sorting 

13
Google Gson - ยกเลิกการลบรายการ <class> รายการวัตถุหรือไม่ (ประเภททั่วไป)
ฉันต้องการถ่ายโอนวัตถุรายการผ่าน Google Gson แต่ฉันไม่ทราบวิธียกเลิกการกำหนดประเภททั่วไป สิ่งที่ฉันลองหลังจากดูที่คำตอบนี้ (คำตอบของ BalusC): MyClass mc = new Gson().fromJson(result, new List&lt;MyClass&gt;(){}.getClass()); แต่จากนั้นฉันได้รับข้อผิดพลาดใน eclipse ที่พูดว่า "The new list () {} ต้องใช้วิธีนามธรรมที่สืบทอดมา ... " และถ้าฉันใช้การแก้ไขอย่างรวดเร็วฉันจะได้มอนสเตอร์มากกว่า 20 วิธี ฉันค่อนข้างมั่นใจว่ามีวิธีแก้ปัญหาที่ง่ายกว่า แต่ฉันก็หาไม่เจอ! แก้ไข: ตอนนี้ฉันมี Type listType = new TypeToken&lt;List&lt;MyClass&gt;&gt;() { }.getType(); MyClass mc = new Gson().fromJson(result, listType); อย่างไรก็ตามฉันได้รับข้อยกเว้นต่อไปนี้ที่บรรทัด "fromJson": java.lang.NullPointerException at org.apache.harmony.luni.lang.reflect.ListOfTypes.length(ListOfTypes.java:47) …
441 java  json  generics  gson 

5
มลพิษที่เป็นไปได้ของฮีปที่เป็นไปได้ผ่านพารามิเตอร์ varargs
ฉันเข้าใจว่าสิ่งนี้เกิดขึ้นกับ Java 7 เมื่อใช้ varargs กับประเภททั่วไป แต่คำถามของฉันคือ .. Eclipse หมายความว่าอย่างไรเมื่อกล่าวว่า "การใช้งานนั้นอาจก่อให้เกิดมลพิษกับฮีปได้" และ @SafeVarargsคำอธิบายประกอบใหม่จะป้องกันสิ่งนี้ได้อย่างไร

22
รายการทั่วไปของคลาสที่ไม่ระบุชื่อ
ใน C # 3.0 คุณสามารถสร้างคลาสที่ไม่ระบุชื่อด้วยไวยากรณ์ต่อไปนี้ var o = new { Id = 1, Name = "Foo" }; มีวิธีการเพิ่มคลาสที่ไม่ระบุชื่อเหล่านี้ลงในรายการทั่วไปหรือไม่ ตัวอย่าง: var o = new { Id = 1, Name = "Foo" }; var o1 = new { Id = 2, Name = "Bar" }; List&lt;var&gt; list = new List&lt;var&gt;(); list.Add(o); list.Add(o1); …

12
ArrayList vs List <> ใน C #
ความแตกต่างระหว่างArrayListและList&lt;&gt;ใน C # คืออะไร? มันเป็นเพียงที่List&lt;&gt;มีประเภทในขณะที่ArrayListไม่ได้?
412 c#  .net  list  generics  arraylist 

14
การส่งผ่านอาร์กิวเมนต์ไปยัง C # generic ใหม่ () ประเภท templated
ฉันกำลังพยายามสร้างวัตถุใหม่ของประเภท T ผ่านตัวสร้างเมื่อเพิ่มลงในรายการ ฉันพบข้อผิดพลาดในการคอมไพล์: ข้อความแสดงข้อผิดพลาดคือ: 'T': ไม่สามารถให้ข้อโต้แย้งเมื่อสร้างอินสแตนซ์ของตัวแปร แต่คลาสของฉันมีอาร์กิวเมนต์ตัวสร้าง! ฉันจะทำงานนี้ได้อย่างไร public static string GetAllItems&lt;T&gt;(...) where T : new() { ... List&lt;T&gt; tabListItems = new List&lt;T&gt;(); foreach (ListItem listItem in listCollection) { tabListItems.Add(new T(listItem)); // error here. } ... }

11
อะไรคือสาเหตุที่ทำให้ Map.get (ปุ่มวัตถุ) ไม่ได้ (เต็ม) ทั่วไป
java.util.Map&lt;K, V&gt;อะไรคือเหตุผลที่อยู่เบื้องหลังการตัดสินใจที่จะไม่ได้เป็นวิธีการที่ได้รับทั่วไปอย่างเต็มที่ในอินเตอร์เฟซของ เพื่อชี้แจงคำถามลายเซ็นของวิธีการคือ V get(Object key) แทน V get(K key) และฉันสงสัยว่าทำไม (แบบเดียวกันสำหรับremove, containsKey, containsValue)

2
Java Generics Wildcarding พร้อมคลาสหลายคลาส
ฉันต้องการมีคลาสวัตถุ แต่ฉันต้องการบังคับให้คลาสใดก็ตามที่แสดงถึงการขยายคลาส A และใช้อินเตอร์เฟส B ที่ฉันสามารถทำได้: Class&lt;? extends ClassA&gt; หรือ: Class&lt;? extends InterfaceB&gt; แต่ฉันทำทั้งสองอย่างไม่ได้ มีวิธีทำเช่นนี้หรือไม่?

7
เมธอดมีการลบแบบเดียวกับเมธอดชนิดอื่น
ทำไมมันไม่ถูกกฎหมายที่จะมีสองวิธีต่อไปนี้ในชั้นเรียนเดียวกัน class Test{ void add(Set&lt;Integer&gt; ii){} void add(Set&lt;String&gt; ss){} } ฉันได้รับ compilation error วิธีการเพิ่ม (ชุด) มีการเพิ่มการลบเช่นเดียวกับชุดวิธีการอื่นในการทดสอบประเภท ในขณะที่ฉันสามารถหลีกเลี่ยงได้ฉันก็สงสัยว่าทำไม javac ไม่ชอบสิ่งนี้ ฉันเห็นได้ว่าในหลาย ๆ กรณีตรรกะของทั้งสองวิธีนั้นจะคล้ายกันมากและอาจถูกแทนที่ด้วยวิธีเดียว public void add(Set&lt;?&gt; set){} วิธีการ แต่นี่ไม่ใช่กรณี นี่เป็นเรื่องที่น่ารำคาญเป็นพิเศษหากคุณต้องการมีสองอันconstructorsที่ขัดแย้งกันเพราะคุณไม่สามารถเปลี่ยนชื่อของหนึ่งในconstructorsนั้นได้
381 java  generics 

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