تحويل مجموعة مزدوجة لمجموعة IComparable
-
03-07-2019 - |
سؤال
وأنا أحاول لإنشاء فئة قاعدة فرز سريع باستخدام VB.NET، مع أنها مجموعة من العناصر IComparable. التوقيع يبدو مثل هذا:
public shared sub Sort(ByVal values() as IComparable)
ولكن، عندما أمرر في مجموعة من الزوجي، والمترجم هو إعطائي أخطاء.
Dim numbers(100) as double
Dim random as new Random(0)
for i as integer = 0 to numbers.length - 1
numbers(i) = random.NextDouble()
Next
QuickSort.Sort(numbers) ' gives compiler error.
والخطأ هو:
Error 88 Value of type '1-dimensional array of Double' cannot be converted to '1-dimensional array of System.IComparable' because 'Double' is not derived from 'System.IComparable'. C:\Proving Grounds\Module1.vb
وحالات وثائق. NET أن يتضاعف في تنفيذ IComparable. لماذا لا يتم المترجم. NET السماح لي أن تفعل هذا؟
المحلول
وعلى الرغم من أن double
يمكن أن يلقي لIComparable
، وهذا لا يعني أن double[]
يمكن أن يلقي لIComparable[]
. ومن شأن خيار بسيط يتمثل في إنشاء مجموعة IComparable[]
جديدة ونسخ البيانات عبر - أو في الحالة الخاصة بك، ببساطة تشغيل مجموعة الأصلي كما IComparable[]
في الواقع، كنت تميل إلى استخدام العامة IComparable<T>
أو IComparer<T>
واجهات، أو مندوب Comparison<T>
- جميع الأدوية باستخدام - وهذا يسمح أيضا استخدام Comparer<T>.Default
وغير افتراضي comparers