سؤال

وأنا أحاول لإنشاء فئة قاعدة فرز سريع باستخدام 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

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top