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

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

4
. NET มีวิธีตรวจสอบว่า List a มีรายการทั้งหมดใน List b หรือไม่?
ฉันมีวิธีการดังต่อไปนี้: namespace ListHelper { public class ListHelper<T> { public static bool ContainsAllItems(List<T> a, List<T> b) { return b.TrueForAll(delegate(T t) { return a.Contains(t); }); } } } จุดประสงค์เพื่อตรวจสอบว่ารายการมีองค์ประกอบทั้งหมดของรายการอื่นหรือไม่ สำหรับฉันดูเหมือนว่าสิ่งนี้จะถูกสร้างขึ้นใน. NET อยู่แล้วนั่นเป็นกรณีนี้และฉันกำลังทำซ้ำฟังก์ชันหรือไม่ แก้ไข: ขออภัยที่ไม่ได้แจ้งล่วงหน้าว่าฉันใช้รหัสนี้ใน Mono เวอร์ชัน 2.4.2
100 c#  .net  list  generics  mono 

5
เทียบเท่าอย่างรวดเร็วสำหรับมาโคร MIN และ MAX
ใน C / Objective-C คุณสามารถค้นหาค่าต่ำสุดและสูงสุดระหว่างสองตัวเลขโดยใช้มาโคร MIN และ MAX Swift ไม่รองรับมาโครและดูเหมือนว่าจะไม่มีสิ่งที่เทียบเท่าในไลบรารีภาษา / ฐาน หนึ่งควรไปกับโซลูชันที่กำหนดเองอาจจะขึ้นอยู่กับข้อมูลทั่วไปเช่นนี้หนึ่ง ?
99 generics  swift 

3
ความแตกต่างระหว่าง <?> และ <? ขยาย Object> ใน Java Generics?
ฉันเคยเห็นตัวแทนที่ใช้มาก่อนเพื่อหมายถึงวัตถุใด ๆ - แต่เพิ่งเห็นการใช้: &lt;? extends Object&gt; เนื่องจากออบเจ็กต์ทั้งหมดขยาย Object จึงมีการใช้งานทั้งสองนี้เหมือนกัน
98 java  syntax  generics 

8
Cast List <int> เป็น List <string> ใน. NET 2.0
คุณสามารถแคสต์List&lt;int&gt;ให้ได้List&lt;string&gt;หรือไม่? ฉันรู้ว่าฉันสามารถวนซ้ำและ. ToString () สิ่งนี้ได้ แต่นักแสดงจะยอดเยี่ยม ฉันอยู่ใน C # 2.0 (ไม่มีLINQ )
97 c#  generics  casting 

10
สร้างรายการ int ดั้งเดิมหรือไม่
มีวิธีสร้างรายการ primitive int หรือ primitives ใน java ดังต่อไปนี้หรือไม่? List&lt;int&gt; myList = new ArrayList&lt;int&gt;(); ดูเหมือนว่าฉันสามารถทำได้ List myList = new ArrayList(); และเพิ่ม "int" ลงในรายการนี้ แต่นั่นหมายความว่าฉันสามารถเพิ่มอะไรก็ได้ในรายการนี้ เป็นทางเลือกเดียวของฉันคือสร้างอาร์เรย์ของ int และแปลงเป็นรายการหรือสร้างรายการวัตถุจำนวนเต็มหรือไม่

3
ThreadStatic vs ThreadLocal <T>: ทั่วไปดีกว่าแอตทริบิวต์หรือไม่
[ThreadStatic]ถูกกำหนดโดยใช้แอตทริบิวต์ในขณะที่ThreadLocal&lt;T&gt;ใช้ทั่วไป เหตุใดจึงเลือกโซลูชันการออกแบบที่แตกต่างกัน ข้อดีและข้อเสียของการใช้ทั่วไปกับแอตทริบิวต์ในกรณีนี้คืออะไร?

7
เป็นโมฆะใน C # generics?
ฉันมีวิธีการทั่วไปที่รับคำขอและให้การตอบกลับ public Tres DoSomething&lt;Tres, Treq&gt;(Tres response, Treq request) {/*stuff*/} แต่ฉันไม่ต้องการคำตอบสำหรับคำขอของฉันเสมอไปและฉันไม่ต้องการป้อนข้อมูลคำขอเพื่อรับคำตอบเสมอไป ฉันไม่ต้องการคัดลอกและวางวิธีการทั้งหมดเพื่อทำการเปลี่ยนแปลงเล็กน้อย สิ่งที่ฉันต้องการคือสามารถทำได้: public Tre DoSomething&lt;Tres&gt;(Tres response) { return DoSomething&lt;Tres, void&gt;(response, null); } เป็นไปได้ในบางลักษณะหรือไม่? ดูเหมือนว่าการใช้ void โดยเฉพาะจะไม่ได้ผล แต่ฉันหวังว่าจะพบบางสิ่งที่คล้ายคลึงกัน
97 c#  generics 

11
วิธีที่หรูหราในการรวมคอลเลกชันขององค์ประกอบต่างๆ
สมมติว่าฉันมีคอลเล็กชันตามจำนวนที่กำหนดแต่ละรายการมีวัตถุประเภทเดียวกัน (เช่นList&lt;int&gt; fooและList&lt;int&gt; bar) หากคอลเลกชันเหล่านี้อยู่ในคอลเลกชั่น (เช่นประเภทList&lt;List&lt;int&gt;&gt;ฉันสามารถใช้SelectManyเพื่อรวมทั้งหมดเป็นคอลเลกชั่นเดียว อย่างไรก็ตามหากคอลเลกชันเหล่านี้ไม่ได้อยู่ในคอลเลกชั่นเดียวกันฉันรู้สึกประทับใจที่ต้องเขียนวิธีการดังนี้: public static IEnumerable&lt;T&gt; Combine&lt;T&gt;(params ICollection&lt;T&gt;[] toCombine) { return toCombine.SelectMany(x =&gt; x); } ซึ่งฉันจะเรียกแบบนี้ว่า var combined = Combine(foo, bar); มีวิธีที่สะอาดและสวยงามในการรวมคอลเลกชัน (จำนวนเท่าใดก็ได้) โดยไม่ต้องเขียนวิธียูทิลิตี้เหมือนCombineข้างต้นหรือไม่? ดูเหมือนง่ายพอที่จะมีวิธีทำใน LINQ แต่อาจจะไม่ใช่

6
วิธีที่ดีที่สุดในการทดสอบว่าประเภททั่วไปเป็นสตริงหรือไม่? (ค#)
ฉันมีคลาสทั่วไปที่ควรอนุญาตประเภทใดก็ได้ดั้งเดิมหรืออย่างอื่น default(T)ปัญหาเดียวกับนี้คือการใช้ เมื่อคุณเรียกค่าเริ่มต้นในประเภทค่าหรือสตริงค่าเริ่มต้นจะเริ่มต้นเป็นค่าที่เหมาะสม (เช่นสตริงว่าง) เมื่อคุณเรียกdefault(T)ใช้ออบเจ็กต์จะส่งกลับค่าว่าง ด้วยเหตุผลหลายประการเราจำเป็นต้องตรวจสอบให้แน่ใจว่าหากไม่ใช่ประเภทดั้งเดิมเราจะมีอินสแตนซ์เริ่มต้นของประเภทไม่ใช่ค่าว่าง นี่คือความพยายาม 1: T createDefault() { if(typeof(T).IsValueType) { return default(T); } else { return Activator.CreateInstance&lt;T&gt;(); } } ปัญหา - สตริงไม่ใช่ประเภทค่า แต่ไม่มีตัวสร้างที่ไม่มีพารามิเตอร์ ดังนั้นวิธีแก้ปัญหาปัจจุบันคือ: T createDefault() { if(typeof(T).IsValueType || typeof(T).FullName == "System.String") { return default(T); } else { return Activator.CreateInstance&lt;T&gt;(); } } แต่นี่ให้ความรู้สึกเหมือนกากเดน มีวิธีที่ดีกว่าในการจัดการกับสายอักขระหรือไม่?
95 c#  generics 

8
รายการ <T> .Contains () ช้ามาก?
ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมList.Contains()ฟังก์ชันgenerics ช้าจัง ฉันมีList&lt;long&gt;ตัวเลขประมาณล้านตัวและรหัสที่คอยตรวจสอบอยู่ตลอดเวลาว่ามีตัวเลขเฉพาะในตัวเลขเหล่านี้หรือไม่ ฉันลองทำสิ่งเดียวกันโดยใช้Dictionary&lt;long, byte&gt;และDictionary.ContainsKey()ฟังก์ชั่นและมันเร็วกว่ารายการประมาณ 10-20 เท่า แน่นอนว่าฉันไม่ต้องการใช้ Dictionary เพื่อจุดประสงค์นั้นจริงๆเพราะมันไม่ได้ตั้งใจให้ใช้แบบนั้น ดังนั้นคำถามที่แท้จริงที่นี่คือมีทางเลือกอื่นนอกเหนือจากList&lt;T&gt;.Contains()นี้ แต่ไม่เลวร้ายเท่าDictionary&lt;K,V&gt;.ContainsKey()?
94 .net  arrays  generics  list 


7
ฉันสามารถใช้ตัวเริ่มต้นการรวบรวมสำหรับรายการพจนานุกรม <TKey, TValue> ได้หรือไม่
ฉันต้องการใช้ตัวเริ่มต้นการรวบรวมสำหรับรหัสบิตถัดไป: public Dictionary&lt;int, string&gt; GetNames() { Dictionary&lt;int, string&gt; names = new Dictionary&lt;int, string&gt;(); names.Add(1, "Adam"); names.Add(2, "Bart"); names.Add(3, "Charlie"); return names; } โดยทั่วไปแล้วควรเป็นดังนี้: return new Dictionary&lt;int, string&gt; { 1, "Adam", 2, "Bart" ... แต่ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร?


5
มีแนวทางที่สมเหตุสมผลสำหรับพารามิเตอร์ประเภท "เริ่มต้น" ใน C # Generics หรือไม่
ในเทมเพลต C ++ เราสามารถระบุว่าพารามิเตอร์บางประเภทเป็นค่าเริ่มต้น ยกเว้นที่ระบุไว้อย่างชัดเจนจะใช้ประเภท T. สามารถทำได้หรือประมาณใน C #? ฉันกำลังมองหาสิ่งที่ต้องการ: public class MyTemplate&lt;T1, T2=string&gt; {} ดังนั้นอินสแตนซ์ของประเภทที่ไม่ได้ระบุอย่างชัดเจนT2: MyTemplate&lt;int&gt; t = new MyTemplate&lt;int&gt;(); โดยพื้นฐานแล้วจะเป็น: MyTemplate&lt;int, string&gt; t = new MyTemplate&lt;int, string&gt;(); ในที่สุดฉันกำลังดูกรณีที่มีเทมเพลตที่ค่อนข้างใช้กันอย่างแพร่หลาย แต่ฉันกำลังพิจารณาขยายด้วยพารามิเตอร์ประเภทเพิ่มเติม ฉันสามารถคลาสย่อยได้ฉันเดา แต่ฉันอยากรู้ว่ามีตัวเลือกอื่นในหลอดเลือดดำนี้หรือไม่

6
ไวยากรณ์ C # - แบ่งสตริงออกเป็นอาร์เรย์ด้วยเครื่องหมายจุลภาคแปลงเป็นรายการทั่วไปและลำดับย้อนกลับ
ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร: IList&lt;string&gt; names = "Tom,Scott,Bob".Split(',').ToList&lt;string&gt;().Reverse(); ฉันทำอะไรลงไป? TSource หมายถึงอะไร?
92 c#  generics  syntax  ilist 

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