سؤال
لا أحد يعرف من وسيلة لإعلان موعد ثابت متوافق مع التواريخ ؟
لقد حاولت:
' not international compatible
public const ADate as Date = #12/31/04#
' breaking change if you have an optional parameter that defaults to this value
' because it isnt constant.
public shared readonly ADate As New Date(12, 31, 04)
المحلول
إذا نظرتم IL الناتجة عن البيان
public const ADate as Date = #12/31/04#
ستظهر لك هذه:
.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )
لاحظ أن DateTimeConstantAttribute يتم تهيئة مع منشئ أن يأخذ int64 علامة الاعتماد.لأن هذا علامة الاعتماد يتم تحديدها في complile الوقت ، يبدو من غير المحتمل أن أي التعريب قادم في اللعب عند هذه القيمة يتم تهيئة في وقت التشغيل.أعتقد أن الخطأ من التاريخ في التعامل مع التعليمات البرمجية الخاصة بك ، وليس const التهيئة.
نصائح أخرى
وفقا Microsoft الوثائق ،
"يجب أن ترفق تاريخ الحرفي في عدد علامات (# #).يجب تحديد قيمة التاريخ في شكل M/d/yyyy ، على سبيل المثال #5/31/1993#.هذا الشرط هو مستقل من الإعدادات المحلية الخاصة بك وجهاز الكمبيوتر الخاص بك هو صيغة التاريخ والوقت إعدادات".
أنت تقول أن هذا غير صحيح و تحليل يتأثر الحالية اللغة ؟
تحرير: هل جربت مع 4 أرقام السنة ؟
مرة واحدة لديك البيانات في تاريخ الكائنات في VB, كنت لا داعي للقلق حول العولمة حتى يمكنك مقارنة شيء أو محاولة تصديره.
هذا على ما يرام:
Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date
SecondDate = FirstDate.AddDays(1)
هذا تسحب في العولمة قواعد ويطبع في الترابط الحالي الثقافة الشكل:
HeaderLabel.Text = SecondDate.ToString()
هذا هو سيء:
Dim BadDate as Date = CDate("2/20/2000")
في الواقع--حتى أنه على ما يرام إذا كنت قوة cdate بينما في هذه الحالة إلى استخدام حق الثقافة (InvariantCulture):
Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)
إذا كنت ترغب في فرض شيء معين الثقافة تحتاج إلى تعيين المنفذة موضوع الثقافة و الثقافة واجهة المستخدم المطلوب الثقافة (en-US, ثابتة, الخ.).
تأكد من أنك لا تقوم بأي عمل مع التواريخ مثل السلاسل--تأكد من أنها الفعلية تاريخ الكائنات!
حسنا أنا أفهم أكثر أين أنت قادم من....
ماذا عن:
- إنشاء أسلوب ثابت الذي يعود تاريخ ثابت.هذا يتغلب الدولية المشكلة لأنه يتم إرجاع المحددة قيمة تاريخ / وقت.
- الآن أتذكر اختياري params من VB6 أيام ، ولكن ألا تستطيع أن تفرط في الأسلوب ؟ إذا كنت تستخدم طاقتها طريقة بدون تاريخ, فقط اسحب من الخطة ؟
تحرير: إذا كنت غير متأكد ما يعني أن مثل نموذج التعليمات البرمجية فقط التعليق هذا المنصب و سوف تشاك واحد.
حسنا, أنا غير متأكد ما كنت تحاول أن تفعل هنا:
- مدونة تقوم بالإرسال هو لا .صافي, هل تحاول الميناء ؟
- التاريخ والوقت هذا لا يمكن أن أعلن عن الثوابت.
- التاريخ والوقت هي نوع البيانات ، وذلك مرة واحدة init رائد شكل كانت init تعرف من هو غير ذي صلة.
- إذا كنت بحاجة إلى قيمة ثابتة ، ثم إنشاء مجرد طريقة العودة دائما نفس التاريخ والوقت.
على سبيل المثال:
public static DateTime SadDayForAll()
{
return new DateTime(2001, 09, 11);
}
التحديث
أين يمكنك الحصول على كل هذا؟!
- هناك هي الاختلافات بين C# و VB.NET وهذا يسلط الضوء على واحد منهم.
- تاريخ ليس .صافي نوع البيانات - التاريخ والوقت هو.
- يبدو أنك يمكن أن تخلق التاريخ والوقت الثوابت في VB.NET ولكن هناك قيود
- طريقة كانت هناك محاولة مساعدتك, حيث لا يمكنك إنشاء const من متغير (أياختياري المعلمة).هذا لا معنى له.