سؤال

ما هو الفرق في استخدام المعيار

type 
  sl: TStringList 

مقارنة باستخدام قائمة TL عامة

type 
  sl: TList<string>

?

بقدر ما أستطيع أن أرى، كلاهما يتصرفان بنفس الطريقة تمامًا.

هل هي مجرد طريقة أخرى لفعل الشيء نفسه؟

هل هناك حالات يكون فيها أحدهما أفضل من الآخر؟

شكرًا!

هل كانت مفيدة؟

المحلول

  • TStringList هو سليل TStrings.
  • يعرف TStringList كيفية فرز نفسه أبجديًا.
  • يحتوي TStringList على خاصية كائنات.
  • TStringList لا يجعل التعليمات البرمجية الخاصة بك غير متوافقة مع كافة الإصدارات السابقة من دلفي.
  • يمكن استخدام TStringList كخاصية منشورة.(هناك خطأ يمنع نشر الفئات العامة في الوقت الحالي.)

نصائح أخرى

تم TStringList حول وقتا طويلا في دلفي قبل كانت الوراثة حولها. لذلك، وقد بنيت عنه حفنة من الميزات المفيدة التي قائمة نوعية سلاسل لن يكون.

والنسخة الوراثة هو مجرد خلق نوع جديد مشابه لTList الذي يعمل على نوع من سلسلة. (. إضافة ()، .Insert (). إزالة ()، .Clear ()، الخ.)

وTStringList ديه الأساليب الأساسية اكتب tlist وأساليب أخرى مخصصة للعمل مع سلاسل، مثل .SaveToFile () و.LoadFromFile ()

إذا كنت تريد التوافق، ثم TStringList هو بالتأكيد وسيلة للذهاب.
إذا كنت تريد ظائف محسنة للعمل مع قائمة سلاسل، ثم TStringList هو الطريق للذهاب. إذا كان لديك بعض أساسيات الترميز الأساسية التي ترغب في العمل مع قائمة من أي نوع، ثم ربما كنت بحاجة الى ان ننظر بعيدا عن TStringList.

  • نظرًا لأن TStringList هو سليل TStrings، فهو متوافق مع خاصية Lines الخاصة بـ TMemo وعناصر TListbox وTComboBox ومكونات VCL الأخرى.لذلك يمكن استخدام cblist.items: = StringList ؛// يستدعي TStrings.Assign داخليًا

وربما كنت أقول إذا كنت تريد استخدام الوراء التوافق TStringList، وإذا كنت تريد التوافق إلى الأمام (ربما الخيار لتغيير تلك القائمة من السلاسل إلى قائمة Int64s في المستقبل يقول) ثم يذهب لTList.

من وجهة نظر الذاكرة استخدام الذاكرة TStringList تزداد مع حجم مؤشر TObject إضافة إلى كل بند. يتم زيادة TList استخدام الذاكرة مع حجم مؤشر يضاف إلى كل عنصر. إذا كانت هناك حاجة فقط مجموعة من السلاسل دون البحث، لتحل محل والفرز أو عمليات النقابي، وينبغي أن تكون مجموعة الحيوي (مجموعة من سلسلة) ما يكفي. هذا يفتقر إلى إدارة ذاكرة جيدة من TStringList أو TList، لكن من الناحية النظرية يجب أن تستخدم ذاكرة أقل.

ووTStringlist هي واحدة من الدرجة متعددة جدا من دلفي. كنت (وسوء المعاملة ؛-)) خاصية الأجسام في أوقات عديدة. انها مثيرة للاهتمام للغاية بسرعة ترجمة سلسلة محددة إلى عنصر تحكم مثل TMemo ومثيلاتها (TListBox، TComboBox، فقط لقائمة قليلة).

<الإضراب> أنا لا أحب الكثير TList، وراض TStringList احتياجاتي دون الحاجة لعلاج مؤشرات (كما هو Tlist قائمة قيم المؤشر).

وتحرير: أنا الخلط بين TList (قائمة مؤشرات) مع TList (قائمة عامة من السلاسل). اسف على ذلك. وجهة نظري تقف: TStringList هو أكثر فقط الكثير من مجرد قائمة من السلاسل

لمعظم الأغراض التي تعرضوا لسوء المعاملة TStringList في الماضي، TObjectDictionary هو أفضل - انها أسرع ولا يحتاج الفرز

إذا كنت في حاجة الى وجوه TStrings (عادة عن الاشياء UI، منذ VCL لا تستخدم الأدوية كثيرا حتى لXE5) استخدام TStringList - صب المطلوبة من TObject هو مزعج ولكن ليس showstopper

تم استخدامها TStringList لفترة طويلة جدا، ولها العديد من المزايا، كل ذكره روب كينيدي.

والعيب الحقيقي الوحيد لاستخدامه كزوج من سلسلة والهدف من ذلك هو ضرورة صب الكائن إلى نوع الفعلي المتوقع وتخزينها في هذه القائمة (عند قراءة) وبقدر ما أعرف لم EMBARCADERO لا توفر دلفي 2009 وحتى المكتبات VCL مع إصدار عام TStringList.

لتجاوز هذا القيد I نفذت تلك القائمة للاستخدام الداخلي وما يقرب من 3 سنوات بأنه يخدم هذه القضية هو الغرض لذلك قررت أن تشاركه اليوم: <لأ href = "https://github.com/t00/deltoo#tgenericstringlist" يختلط = "نوفولو"> https://github.com/t00/deltoo#tgenericstringlist

واحد ملاحظة هامة - فإنه يغير الخاصية الافتراضية من سلاسل إلى كائنات كما هو الحال في معظم الحالات عندما يتم تخزين الكائن في قائمة بل هو أيضا خاصية الوصول إليها في الغالب منه

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