192. Thread CurrentCuture

בהמשך לטיפים הקודמים,

ראינו בפעמים הקודמות כיצד ניתן להתגבר על הבעיה של פרסור וכתיבת תאריכים למחרוזות.

הבעיה העיקרית בפתרונות שראינו היא שבכל קריאה לToString ולDateTime.ParseExact (או לDateTime.Parse), אנחנו צריכים לציין את הCultureInfo או את הפורמט שאנחנו מעוניינים להשתמש בו.

הבעיה בזה היא שזה מכער לנו קצת את הקוד וגם שקל לשכוח לעשות את זה.

מסתבר שקיים הProperty ששמו CurrentCulture של Thread המאפשר לנו לציין עם איזה CultureInfo אנחנו מעוניינים לעבוד בThread הספציפי.

למשל,

1
2
CultureInfo usCulture = new CultureInfo("en-us", false);
Thread.CurrentThread.CurrentCulture = usCulture;

כעת אם נבצע את השורות הבאות נקבל:

1
2
3
DateTime rememberRemember = new DateTime(1997, 11, 5);
string rememberRememberString = rememberRemember.ToString();
// 11/5/1997 12:00:00 AM

ללא תלות בהגדרות המחשב שלנו, ולהפך:

1
2
3
4
5
6
7
DateTime theFifthOfNovember =
DateTime.Parse(rememberRememberString);
if (rememberRemember == theFifthOfNovember)
{
// true
}

כך נצטרך לאתחל את הCultureInfo רק במקום אחד עבור כל Thread.

למרבה הצער, אין Property דומה המאפשר לנו לאתחל את הCultureInfo עבור כל הProcess, ולכן צריך לחשוב על פתרון לשאלה היכן מתאחלים אותו.

אופציה אחת היא ליצור Factory מיוחד של Threadים שידע לאתחל לThreadים את הProperty הזה בCultureInfo המתאים, וכל פעם שמישהו יבקש Thread הוא יצטרך לעבור דרך הFactory הזה.

אופציה נוספת היא בכל מחלקה שבה מתעסקים בפרסור תאריכים לאתחל מחדש את הCultureInfo, אבל זה יותר מכוער.

המשך יום טוב עם תרבות נוכחית טובה

שתף