سؤال

في .Net، يمكنك قراءة قيمة سلسلة في نوع بيانات آخر باستخدام أي منهما <datatype>.parse أو Convert.To<DataType>.

لست على دراية بأساسيات التحليل مقابل التحويل، لذا فأنا دائمًا في حيرة عندما يُسأل عن أيهما أفضل/أسرع/أكثر ملاءمة.

إذًا - ما هي الطريقة الأفضل في أي نوع من الظروف؟

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

المحلول

ال Convert.ToXXX() الأساليب مخصصة للكائنات التي قد تكون من النوع الصحيح أو المشابه، بينما .Parse() و .TryParse() مخصصة للسلاسل:

//o is actually a boxed int
object o = 12345;

//unboxes it
int castVal = (int) 12345;

//o is a boxed enum
object o = MyEnum.ValueA;

//this will get the underlying int of ValueA
int convVal = Convert.ToInt32( o );

//now we have a string
string s = "12345";

//this will throw an exception if s can't be parsed
int parseVal = int.Parse( s );

//alternatively:
int tryVal;
if( int.TryParse( s, out tryVal ) ) {
    //do something with tryVal 
}

إذا قمت بالتجميع باستخدام إشارات التحسين، فإن TryParse سريع جدًا - فهو أفضل طريقة للحصول على رقم من سلسلة.ومع ذلك، إذا كان لديك كائن قد يكون int أو قد يكون سلسلة، فإن Convert.ToInt32 يكون أسرع.

نصائح أخرى

وهنا الجواب بالنسبة لك:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

على الرغم من أنني أعتقد أنه في الإصدارات الحديثة من .NET، فإن أفضل ما يمكنك فعله هو استخدام TryParse على أية حال، إذا كان هناك أي شك في نجاح التحويل.

أنا معجب كبير ب حاول التحليل, ، نظرًا لأنه يوفر عليك الكثير من المتاعب الناتجة عن اكتشاف الأخطاء عندما تكون هناك فرصة لأن القيمة التي ستقوم بتحليلها ليست من النوع المناسب.

طلبي عادة هو:

  • تحليل (إذا كان بإمكاني التأكد من أن القيمة ستكون من النوع الصحيح، وأحاول التأكد من ذلك)
  • TryParse (إذا لم أتمكن من التأكد مما يحدث عندما يتعلق الأمر بإدخال المستخدم، أو الإدخال من نظام لا يمكنك التحكم فيه)
  • التحويل (الذي أعتقد أنني لم أستخدمه منذ أن بدأت استخدام Parse وTryParse، ولكن قد أكون مخطئًا)

هناك أيضًا طريقة DirectCast والتي يجب عليك استخدامها فقط إذا كنت متأكدًا من نوع الكائن.إنه أسرع، لكنه لا يقوم بأي فحوصات مناسبة.أستخدم DirectCast عندما أقوم باستخراج القيم من DataTable المكتوب بشكل غير محكم عندما أعرف نوع كل عمود.

إذا كنت بحاجة إلى السرعة، فأنا متأكد من أن التمثيل المباشر هو أسرع طريقة.ومع ذلك، عادةً ما أستخدم .Parse أو .TryParse لأنه يبدو أنه يجعل قراءة الأشياء أسهل، ويتصرف بطريقة أكثر قابلية للتنبؤ.

تحويل في الواقع يستدعي Parse تحت الغطاء، على ما أعتقد.لذلك لا يوجد فرق يذكر، ويبدو أن الأمر مجرد مسألة ذوق شخصي.

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