C 中的CultureInfo類解析

2022-09-23 19:15:07 字數 1584 閱讀 1435

cultureinfo類位於system.globalization命名空間內,這個類和命名空間許多人都不是很熟悉,實際我們在寫程式寫都經常間接性的接觸這個類,當進行數字,日期時間,字串匹配時,都會進行cultureinfo的操作,也就是說,也就是不同的cultureinfo下,這些操作的結果可能會不一樣,由於我們大部分開發部署都是在同一種語言環境中,平日裡可能沒有感覺到它的用處,如果你的開發的專案是給國外使用者用的,有可能在你機器上執行輸出是一種效果,在客戶機器上是另一種輸出效果,這句需要用到cultureinfo類了,對使用使用者來說,這也是ms提供的人性化的一面(比方說,同樣是日期,中文環境輸出符合中國人的習慣,德語環境中的輸出符合德國人的習慣,這是預設的輸出方式),但對開發人員和服務資料中心來說,就要選擇是保證統一的輸出,還是用ms的預設方式了。

code如下:

1 static readonly string culturesources = ;

2 static readonly random ran = new random(environment.tickcount);

3 4

5 static void main()

6

10 console.readline();

11 }

12 13

14 static void client(object obj)

15 \n資料輸出是:\n", culture.displayname, datetime.now.toshortdatestring());

21 }

執行結果如下:

結果看到了吧,同樣的datetime.now.toshortdatestring(),在英語-美國,中文-中國,阿拉伯語-伊拉克和德語-德國的不同環境下,日期輸出格式竟然有如此不同的輸出結果,這樣對使用的使用者來說是很友好的,單對程式設計人員來說,如果對這些資料要處理,就要考慮不同的語言環境中,該怎麼處理了,同時,這些資料讓資料中心伺服器情何以堪啊……

原因分析:

.net會考慮當前執行緒的cultureinfo,即thread.currentthread.currentculture(或者cultureinfo.currentculture),並根據cultureinfo,進行相應地區文化的資料處理,要解決這個問題,這樣設定

thread.currentthread.currentculture = cultureinfo.invariantculture;//和new cultureinfo("");一樣,使用固定區域性,固定區域性不區分區域性;它與英語語言關聯,但不與任何國家/地區關聯

這樣不管客戶端執行在什麼語言環境下,輸出的時間格式都是統一的,方便資料中心伺服器對資料做後續處理。

結果如下圖:

支援多種cultureinfo是整個.net framework更加人性化,因為這可以使同乙個資料適應不同地區和文化,這樣當然滿足處於不同地區和文化的使用者,但前提是資料給「人」看,如果這些資料用於計算機之間的傳輸,即給「機器」看,這樣的多文化處理反而不妥,造成同乙個資料的不同展現形式,尤其是讀寫兩方的文化地區不同時,資料可能根本無法被正常讀取或者產生潛在bug,因此這裡,正是invariantculture的用武之地。

c 類和C 中定義類的定義

c 類和c 中定義類的定義 相同處 1.1.都需要使用 class標識 1.2.都包含有成員 函式,屬性 1.3.都有private public protect 標識的成員 2.不同之處 2.2.c 申明類及成員時格式 class member 一般在class的末尾處需要乙個英文分割符號 pub...

C 中類的建立

一 類定義 乙個類可以有很多方法和屬性以及字段。感覺我以前經常把類和方法弄混淆,類是後面沒有 的,直接就是像下面的幾段 簡單的類就ok了,如果想進一步宣告方法的話,在 裡面宣告 下面介紹幾種類 1 class class1 這樣的類只能在本專案中進行例項化。2 public class class1...

C 中類的宣告

可以宣告乙個類而不定義它 class screen declaration of the screen class 這個宣告,有時候被稱為前向宣告 forward declaration 在程式中引入了類型別的screen.在宣告之後,定義之前,類screen是乙個不完全型別 incompete t...