ماذا يفعل IFormatProvider؟
-
21-08-2019 - |
سؤال
كنت أتلاعب بالطريقة Datetime.ParseExact، وهي تريد IFormatProvider...
إنه يعمل بإدخال قيمة فارغة، ولكن ماذا يفعل بالضبط؟
المحلول
في ADITION إلى الإجابة إيان بويد:
وأيضا CultureInfo
تطبق هذه الواجهة، ويمكن استخدامها في قضيتك. لذلك يمكن أن تحليل سلسلة تاريخ الفرنسية على سبيل المثال. هل يمكن استخدام
var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);
نصائح أخرى
ال IFormatProvider
يتم تنفيذ الواجهة عادةً لك بواسطة أ CultureInfo
الطبقة، على سبيل المثال:
CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.InvariantCulture
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
الواجهة عبارة عن بوابة لوظيفة للحصول على مجموعة من البيانات الخاصة بالثقافة من الثقافة.الكائنان الثقافيان المتاحان بشكل شائع IFormatProvider
يمكن الاستعلام عنها وهي:
DateTimeFormatInfo
NumberFormatInfo
الطريقة التي تعمل بها عادة هي أن تسأل IFormatProvider
لتعطيك أ DateTimeFormatInfo
هدف:
DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
DoStuffWithDatesOrTimes(format);
هناك أيضًا معرفة داخلية بأن أي IFormatProvider
من المحتمل أن يتم تنفيذ الواجهة بواسطة فئة تنحدر من CultureInfo
, ، أو ينحدر منها DateTimeFormatInfo
, ، حتى تتمكن من إرسال الواجهة مباشرة:
CultureInfo info = provider as CultureInfo;
if (info != null)
format = info.DateTimeInfo;
else
{
DateTimeFormatInfo dtfi = provider as DateTimeFormatInfo;
if (dtfi != null)
format = dtfi;
else
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
}
if (format != null)
DoStuffWithDatesOrTimes(format);
لكن لا تفعل ذلك
لقد تم بالفعل كتابة كل هذا العمل الشاق من أجلك:
للحصول على DateTimeFormatInfo
من IFormatProvider
:
DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);
للحصول على NumberFormatInfo
من IFormatProvider
:
NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);
قيمة ال IFormatProvider
هو أنك تقوم بإنشاء كائنات الثقافة الخاصة بك.طالما أنهم ينفذون IFormatProvider
, ، وإرجاع الكائنات المطلوبة، يمكنك تجاوز الثقافات المضمنة.
تستطيع ايضا استخذام IFormatProvider
عن طريقة لتمرير كائنات ثقافية عشوائية - من خلال IFormatProvider
.على سبيل المثالاسم الله في الثقافات المختلفة
- إله
- إله
- يهوه
- الرب
- יהוה
- אהיה אשר אהיה
وهذا يتيح العرف الخاص بك LordsNameFormatInfo
ركوب الصف على طول داخل IFormatProvider
, ، ويمكنك الحفاظ على المصطلح.
في الواقع لن تحتاج إلى الاتصال أبدًا GetFormat
طريقة IFormatProvider
نفسك.
كلما كنت في حاجة الى IFormatProvider
يمكنك تمرير أ CultureInfo
هدف:
DateTime.Now.ToString(CultureInfo.CurrentCulture);
endTime.ToString(CultureInfo.InvariantCulture);
transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));
ملحوظة:يتم إصدار أي رمز في المجال العام.لا الإسناد المطلوبة.
واجتياز اغية كما IFormatProvider
ليست الطريقة الصحيحة للقيام بذلك. إذا كان المستخدم لديه تنسيق التاريخ مخصص / الوقت على أجهزة الكمبيوتر الخاصة بهم سيكون لديك قضايا في تحليل وتحويل إلى سلسلة. لقد حددت مجرد خلل فيها شخص ما قد مرت فارغة مثل IFormatProvider عند التحويل إلى السلسلة.
وبدلا من ذلك يجب أن تستخدم CultureInfo.InvariantCulture
وهذا غير صحيح:
string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);
والصحيح:
string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);
وهنا يمكنك ان ترى http://msdn.microsoft.com/ أون لنا / مكتبة / system.iformatprovider.aspx
وانظر القسم المخصص للملاحظات والمثال هناك.
IFormatProvider يوفر معلومات الثقافة الأسلوب في السؤال. DateTimeFormatInfo تنفذ IFormatProvider، ويسمح لك لتحديد شكل تريد تاريخك / زمن ليتم عرضها في. يمكن العثور على أمثلة في صفحة MSDN ذات الصلة.
بواسطة MSDN
يتضمن .NET Framework ما يلي ثلاثة تطبيقات IFormatProvider المحددة مسبقًا لتوفير معلومات خاصة بالثقافة يتم استخدامها في تنسيق أو تحليل القيم الرقمية وقيم التاريخ والوقت:
- ال
NumberFormatInfo
فئة، والتي توفر المعلومات المستخدمة لتنسيق الأرقام، مثل العملة، وفاصل الآلاف، ورموز الفواصل العشرية لثقافة معينة.للحصول على معلومات حول سلاسل التنسيق المحددة مسبقًا والتي تم التعرف عليها بواسطة aNumberFormatInfo
كائن ويستخدم في عمليات التنسيق الرقمي، راجع سلاسل التنسيق الرقمي القياسية وسلاسل التنسيق الرقمي المخصصة. - ال
DateTimeFormatInfo
فئة، والتي توفر المعلومات المستخدمة لتنسيق التواريخ والأوقات، مثل رموز فاصل التاريخ والوقت لثقافة معينة أو ترتيب وتنسيق مكونات السنة والشهر واليوم للتاريخ.للحصول على معلومات حول سلاسل التنسيق المحددة مسبقًا والتي تم التعرف عليها بواسطة aDateTimeFormatInfo
الكائن والمستخدم في عمليات التنسيق الرقمي، راجع سلاسل تنسيق التاريخ والوقت القياسية وسلاسل تنسيق التاريخ والوقت المخصصة. - ال
CultureInfo
الطبقة التي تمثل ثقافة معينة.إنهGetFormat
تقوم الطريقة بإرجاع ثقافة محددةNumberFormatInfo
أوDateTimeFormatInfo
الكائن، اعتمادًا على ما إذا كانCultureInfo
يتم استخدام الكائن في عملية تنسيق أو تحليل تتضمن أرقامًا أو تواريخ وأوقات.
يدعم .NET Framework أيضًا التنسيق المخصص.يتضمن هذا عادةً إنشاء فئة تنسيق تطبق كلاً من IFormatProvider وICustomFormatter.يتم بعد ذلك تمرير مثيل لهذه الفئة كمعلمة إلى أسلوب ينفذ عملية تنسيق مخصصة، مثل String.Format(IFormatProvider, String, Object[])
.
DateTimeFormatInfo الطبقة تطبق هذه الواجهة، لذلك يسمح لك للسيطرة على تنسيق سلاسل التاريخ والوقت الخاص بك.