سؤال

يجب أن يكون السيناريو الخاص بي بسيطًا..النوع الذي أريد تحويله من يكون دائماً 'خيط'.ما أريد تحويله إلى...يمكن أن تكون أشياء كثيرة - ints، DateTimes، ...سلاسل، الخ.

سيكون هذا سهلاً:

string valueToConvertFrom = "123";

int blah = Convert.ToInt32(valueToConvertFrom);

لكن...لا أعرف (حتى وقت التشغيل) أن القيمة التي أحتاج إلى التحويل إليها هي "Int" (أو أي شيء آخر).لقد حاولت هذا:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

object blah = Convert.ChangeType(valueToConvertFrom, convertToType);

لكن هذا يعطيني الخطأ التالي:"يجب أن يقوم الكائن بتنفيذ IConvertible."

لا أريد أن أضطر إلى إجراء بيان تبديل والاتصال بـ "Convert.ToBlah" بناءً على اسم النوع...أي اقتراحات؟

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

المحلول

والطريقة نظيفة للقيام بذلك يستخدم لTypeConverter. يمكنك الحصول على مثيل لتحويل نوع عن طريق استدعاء TypeDescriptor .GetConverter ثم استخدام مثيل تحويل نوع للقيام بهذا التحويل. ذلك شيء من هذا القبيل:

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

TypeConverter tc =  TypeDescriptor.GetConverter(convertToType);             

object blah =tc.ConvertFromString(valueToConvertFrom);

نصائح أخرى

وفئة سلسلة تنفذ IConvertible، هذا الرمز ببساطة يجب أن تعمل. إصدار. NET أنت تهدف؟

object o = Convert.ChangeType( str, convertToType );

وعلاوة على ذلك، فإن معظم أنواع ذكرتم تنفيذ أسلوب تحليل، لذلك افضل بالرصاص قد يكون شيئا من هذا القبيل.

Type convertToType = ...;
MethodInfo mi = convertToType.GetMethod("Parse", BindingFlags.Static);
object blah;
if(mi != null)
{
    blah = mi.Invoke(null, new object[]{valueToConvertFrom});
}
else
{
    // the type doesn't implement the Parse method, handle it another way :/
}

يعد سؤال تيموثي، كما هو مطبق بشكل عام على مسألة تحويل النوع في .NET، مشكلة كبيرة جدًا.على الرغم من أن استراتيجيات التحويل واضحة إلى حد ما في سيناريوهات محددة ذات أنواع معروفة، إلا أنه لسوء الحظ لا توجد استراتيجية عامة في أي تطبيق لـ .NET لإنجاز تحويل النوع في وقت التشغيل من نوع عشوائي إلى آخر، ولا توجد مثل هذه الإستراتيجية قادمة من Redmond.ومع ذلك، توفر Microsoft بعض الإرشادات الجيدة للمفهوم العام لتحويل النوع، بما في ذلك:

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

آمل أن يساعدك هذا،

علامة

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