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

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

6
อะไรคือความแตกต่างระหว่าง 'E', 'T' และ '?' สำหรับ Java generics?
ฉันเจอโค้ด Java เช่นนี้: public interface Foo<E> {} public interface Bar<T> {} public interface Zar<?> {} อะไรคือความแตกต่างระหว่างทั้งสามข้อข้างต้นและสิ่งที่เรียกว่าการประกาศคลาสหรืออินเตอร์เฟสแบบนี้ใน Java?
261 java  generics 

27
แปลงรายการทั่วไป / แจกแจงเป็น DataTable หรือไม่
ฉันมีวิธีการสองสามอย่างที่ส่งคืนรายการทั่วไปที่ต่างกัน มีอยู่ใน. net ใด ๆ วิธีคงที่ระดับหรืออะไรก็ตามที่จะแปลงรายการใด ๆ ลงใน DataTable? สิ่งเดียวที่ฉันจินตนาการได้คือใช้ Reflection เพื่อทำสิ่งนี้ ถ้าฉันมีสิ่งนี้: List<Whatever> whatever = new List<Whatever>(); (รหัสต่อไปนี้ใช้ไม่ได้แน่นอน แต่ฉันต้องการมีความเป็นไปได้ที่: DataTable dt = (DataTable) whatever;
261 c#  list  generics  datatable 

7
ความแตกต่างระหว่าง SortedList และ SortedDictionary คืออะไร
มีความแตกต่างในทางปฏิบัติจริงระหว่าง a SortedList<TKey,TValue>และ a SortedDictionary<TKey,TValue>หรือไม่? มีสถานการณ์ใดบ้างที่คุณจะใช้อย่างใดอย่างหนึ่งโดยเฉพาะ

4
ReSharper เตือน:“ สนามคงที่ในประเภททั่วไป”
public class EnumRouteConstraint<T> : IRouteConstraint where T : struct { private static readonly Lazy<HashSet<string>> _enumNames; // <-- static EnumRouteConstraint() { if (!typeof(T).IsEnum) { throw new ArgumentException( Resources.Error.EnumRouteConstraint.FormatWith(typeof(T).FullName)); } string[] names = Enum.GetNames(typeof(T)); _enumNames = new Lazy<HashSet<string>>(() => new HashSet<string> ( names.Select(name => name), StringComparer.InvariantCultureIgnoreCase )); } public bool Match(HttpContextBase httpContext, …

3
วิธีการทั่วไปที่มีข้อ จำกัด หลายอย่าง
ฉันมีวิธีการทั่วไปซึ่งมีสองพารามิเตอร์ทั่วไป ฉันพยายามรวบรวมรหัสด้านล่าง แต่มันไม่ทำงาน มันเป็นข้อ จำกัด ของ. NET หรือไม่? เป็นไปได้ไหมที่จะมีข้อ จำกัด หลายอย่างสำหรับพารามิเตอร์ที่แตกต่างกัน? public TResponse Call<TResponse, TRequest>(TRequest request) where TRequest : MyClass, TResponse : MyOtherClass
251 c#  generics  .net-3.5 

4
Scala: บทคัดย่อประเภทเทียบกับยาชื่อสามัญ
ผมอ่านทัวร์ของ Scala: นามธรรมประเภท เมื่อใดควรใช้ประเภทนามธรรม ตัวอย่างเช่น, abstract class Buffer { type T val element: T } ค่อนข้างทั่วไปเช่นนั้น abstract class Buffer[T] { val element: T }

11
วิธีใช้ Class <T> ใน Java
มีการอภิปรายที่ดีเกี่ยวกับ Generics และสิ่งที่พวกเขาทำอยู่เบื้องหลังในคำถามนี้ดังนั้นเราทุกคนรู้ว่านั่นVector&lt;int[]&gt;คือเวกเตอร์ของอาร์เรย์จำนวนเต็มและHashTable&lt;String, Person&gt;เป็นตารางที่คีย์เป็นสตริงและค่าPersons Class&lt;&gt;แต่สิ่งที่ตอฉันก็คือการใช้งานของ คลาส java Classควรใช้ชื่อเทมเพลตด้วย (หรือดังนั้นฉันถูกบอกโดยขีดเส้นใต้สีเหลืองใน eclipse) ฉันไม่เข้าใจสิ่งที่ฉันควรใส่ จุดรวมของClassวัตถุคือเมื่อคุณไม่มีข้อมูลเกี่ยวกับวัตถุอย่างสมบูรณ์เพื่อสะท้อนและเช่นนั้น ทำไมมันทำให้ฉันระบุคลาสที่Classวัตถุจะเก็บ? ฉันไม่รู้แน่ชัดหรือไม่ใช้Classวัตถุฉันจะใช้วัตถุเฉพาะ

17
คุณจะเลือก List of supertypes เป็น List of subtypes ได้อย่างไร
ตัวอย่างเช่นสมมติว่าคุณมีสองคลาส: public class TestA {} public class TestB extends TestA{} ฉันมีวิธีที่ผลตอบแทนList&lt;TestA&gt;และฉันต้องการที่จะโยนวัตถุทั้งหมดในรายการที่จะเพื่อที่ฉันจบลงด้วยTestBList&lt;TestB&gt;

3
การเข้าถึงแบบคำนึงถึงขนาดตัวพิมพ์เล็กและใหญ่สำหรับพจนานุกรมทั่วไป
ฉันมีแอปพลิเคชันที่ใช้ Dll ที่ได้รับการจัดการ หนึ่งใน Dll เหล่านั้นส่งคืนพจนานุกรมทั่วไป: Dictionary&lt;string, int&gt; MyDictionary; พจนานุกรมประกอบด้วยปุ่มที่มีตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ในอีกด้านหนึ่งฉันได้รับรายการของคีย์ที่อาจเกิดขึ้น (สตริง) แต่ฉันไม่สามารถรับประกันกรณี ฉันพยายามรับค่าในพจนานุกรมโดยใช้ปุ่ม แต่แน่นอนว่าสิ่งต่อไปนี้จะล้มเหลวเนื่องจากฉันมีขนาดตัวพิมพ์ไม่ตรงกัน: bool Success = MyDictionary.TryGetValue( MyIndex, out TheValue ); ฉันหวังว่า TryGetValue จะมีการตั้งค่าสถานะตัวพิมพ์เล็ก - ใหญ่เหมือนที่กล่าวไว้ในเอกสาร MSDNแต่ดูเหมือนว่านี่จะไม่ถูกต้องสำหรับพจนานุกรมทั่วไป มีวิธีการรับค่าของพจนานุกรมที่ละเว้นกรณีสำคัญหรือไม่ มีวิธีแก้ปัญหาที่ดีกว่าการสร้างสำเนาใหม่ของพจนานุกรมด้วยพารามิเตอร์StringComparer.OrdinalIgnoreCaseที่เหมาะสมหรือไม่
244 c#  generics  dictionary 

7
Java generics ประเภทลบ: เมื่อใดและจะเกิดอะไรขึ้น
ฉันอ่านเกี่ยวกับการลบประเภทของ Java บนเว็บไซต์ของออราเคิล การลบประเภทเกิดขึ้นเมื่อใด ในเวลารวบรวมหรือรันไทม์? เมื่อชั้นเรียนถูกโหลด? เมื่อชั้นเรียนถูกยกตัวอย่าง? มีไซต์จำนวนมาก (รวมถึงบทแนะนำอย่างเป็นทางการที่กล่าวถึงข้างต้น) พูดว่าการลบประเภทเกิดขึ้นในเวลารวบรวม หากข้อมูลประเภทจะถูกลบออกอย่างสมบูรณ์ในเวลารวบรวมวิธีการตรวจสอบความเข้ากันได้ของประเภท JDK เมื่อวิธีการใช้ข้อมูลทั่วไปจะถูกเรียกโดยไม่มีข้อมูลประเภทหรือข้อมูลประเภทที่ไม่ถูกต้อง? ลองพิจารณาตัวอย่างต่อไปนี้: ระดับ Say มีวิธีการที่A empty(Box&lt;? extends Number&gt; b)เรารวบรวมและรับไฟล์ชั้นเรียนA.javaA.class public class A { public static void empty(Box&lt;? extends Number&gt; b) {} } public class Box&lt;T&gt; {} ตอนนี้เราสร้างชั้นอื่นBซึ่งเรียกวิธีการที่emptyมีข้อโต้แย้งที่ไม่แปร empty(new Box())(ชนิดดิบ): ถ้าเรารวบรวมB.javaกับA.classใน classpath ที่ javac เป็นพอสมาร์ทที่จะยกระดับการเตือน ดังนั้นจึงA.class มีข้อมูลประเภทที่เก็บอยู่ในนั้น public class …

6
ทำไม Java Generics ไม่สนับสนุนประเภทดั้งเดิม
เหตุใด generics ใน Java จึงทำงานกับคลาสได้ แต่ไม่ใช่ชนิดพื้นฐาน ตัวอย่างเช่นวิธีนี้ใช้งานได้ดี: List&lt;Integer&gt; foo = new ArrayList&lt;Integer&gt;(); แต่สิ่งนี้ไม่ได้รับอนุญาต: List&lt;int&gt; bar = new ArrayList&lt;int&gt;();
236 java  generics  primitive 

5
วิธีการส่งพารามิเตอร์ไปยัง Activator.CreateInstance <T> ()
ฉันต้องการสร้างตัวอย่างของประเภทที่ฉันระบุในวิธีการทั่วไปที่ฉันมี ประเภทนี้มีคอนสตรัคเตอร์ที่โอเวอร์โหลดจำนวนมาก ฉันต้องการที่จะสามารถส่งผ่านข้อโต้แย้งไปยังผู้สร้าง แต่ Activator.CreateInstance&lt;T&gt;() ไม่เห็นว่ามีตัวเลือกนี้ มีวิธีอื่นที่จะทำหรือไม่

11
การแปลงประเภททั่วไปจากสตริง
ฉันมีคลาสที่ฉันต้องการใช้เพื่อเก็บ "คุณสมบัติ" สำหรับคลาสอื่น คุณสมบัติเหล่านี้มีชื่อและค่า นึกคิดสิ่งที่ฉันต้องการคือการสามารถพิมพ์เพิ่มคุณสมบัติที่เพื่อให้ "ค่า" ที่ส่งคืนนั้นเป็นประเภทที่ฉันต้องการ ประเภทควรเป็นแบบดั้งเดิม คลาสนี้คลาสย่อยเป็นคลาสนามธรรมซึ่งโดยทั่วไปจะเก็บชื่อและค่าเป็นสตริง แนวคิดที่ว่าคลาสย่อยนี้จะเพิ่มความปลอดภัยบางประเภทให้กับคลาสฐาน (รวมทั้งช่วยฉันในการแปลงบางส่วน) ดังนั้นฉันได้สร้างชั้นเรียนซึ่งเป็น (ประมาณ) นี้: public class TypedProperty&lt;DataType&gt; : Property { public DataType TypedValue { get { // Having problems here! } set { base.Value = value.ToString();} } } ดังนั้นคำถามคือ: มีวิธี "ทั่วไป" ในการแปลงจากสตริงกลับเป็นดั้งเดิม? ฉันไม่พบอินเทอร์เฟซทั่วไปที่เชื่อมโยงการแปลงทั่วกระดาน (เช่นITryParsableน่าจะเหมาะอย่างยิ่ง!)

10
สร้างอินสแตนซ์ประเภททั่วไปที่ตัวสร้างต้องการพารามิเตอร์หรือไม่
หากBaseFruitมีคอนสตรัคเตอร์ที่ยอมรับได้int weightฉันจะยกตัวอย่างผลไม้ในวิธีทั่วไปแบบนี้ได้ไหม public void AddFruit&lt;T&gt;()where T: BaseFruit{ BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); } ตัวอย่างถูกเพิ่มไว้ข้างหลังความคิดเห็น ดูเหมือนว่าฉันจะทำสิ่งนี้ได้ก็ต่อเมื่อฉันให้BaseFruitนวกรรมิกแบบไม่มีพารามิเตอร์แล้วเติมทุกอย่างผ่านตัวแปรสมาชิก ในรหัสที่แท้จริงของฉัน (ไม่เกี่ยวกับผลไม้) นี้ค่อนข้างทำไม่ได้ - อัปเดต - ดังนั้นจึงไม่สามารถแก้ไขได้ด้วยข้อ จำกัด แต่อย่างใด จากคำตอบมีสามวิธีแก้ปัญหาผู้สมัคร: รูปแบบโรงงาน การสะท้อน Activator ฉันมักจะคิดว่าการไตร่ตรองนั้นสะอาดน้อยที่สุด แต่ฉันก็ไม่สามารถตัดสินใจได้ระหว่างสองสิ่งนี้
230 c#  .net  generics 

13
แปลงรายการวัตถุจากประเภทหนึ่งไปอีกประเภทหนึ่งโดยใช้การแสดงออกแลมบ์ดา
ฉันมีวง foreach อ่านรายการของวัตถุประเภทหนึ่งและผลิตรายการวัตถุประเภทอื่น ฉันถูกบอกว่าการแสดงออกแลมบ์ดาสามารถบรรลุผลลัพธ์เดียวกัน var origList = List&lt;OrigType&gt;(); // assume populated var targetList = List&lt;TargetType&gt;(); foreach(OrigType a in origList) { targetList.Add(new TargetType() {SomeValue = a.SomeValue}); } ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม - ฉันยังใหม่กับแลมบ์ดาและลินุกซ์ขอบคุณ
224 c#  generics  lambda 

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