Ai đó có thể đưa ra một ví dụ để chứng minh việc sử dụng của Invariant Culture? Tôi không hiểu những gì tài liệu mô tả.Văn hóa bất biến là gì?
Trả lời
Văn hóa bất biến là một nền văn hóa đặc biệt hữu ích vì nó sẽ không thay đổi. Văn hóa hiện tại có thể thay đổi từ người dùng này sang người khác, hoặc thậm chí từ người này sang người khác, vì vậy bạn không thể dựa vào nó.
Có thể sử dụng cùng một nền văn hóa mỗi lần rất quan trọng trong một số luồng, ví dụ, tuần tự hóa: bạn có thể có giá trị 1,1 trong một nền văn hóa và 1,1 trong một nền văn hóa khác. Nếu bạn sẽ cố gắng phân tích giá trị "1,1" trong văn hóa thứ hai, thì việc phân tích cú pháp sẽ thất bại. Tuy nhiên bạn có thể sử dụng văn hóa bất biến để chuyển đổi một số thành một chuỗi và sau đó phân tích cú pháp nó trở lại từ bất kỳ máy tính nào với bất kỳ bộ văn hóa nào.
// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
decimal dec = 1.1m;
string convertedToString = dec.ToString();
// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";
decimal parsedDec;
try
{
// This fails because value cannot be parsed.
parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}
// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);
// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);
Đối với những gì nó có giá trị, điều này là trong không gian tên 'System.Globalization'. –
* Điều này sẽ luôn hoạt động vì bạn đã tuần tự hóa với cùng một nền văn hóa * << điều này không có ý nghĩa đối với tôi, tôi nghĩ rằng tôi đã hiểu nhầm điều gì đó. Nếu sử dụng 'CultureInfo.InvariantCulture' hoạt động vì bạn đã tuần tự hóa với cùng một nền văn hóa .... thì không phải là nó giống như sử dụng' CultureInfo.CurrentCulture'? – Alisson
@Alisson Nếu bạn đặt hai câu lệnh mã cuối cùng của Andrew trở lại luồng ban đầu, tôi nghĩ nó sẽ có ý nghĩa hơn. Nếu bạn luôn luôn tuần tự hóa bằng cách sử dụng 'CultureInfo.InvariantCulture' thì bạn biết rằng bạn sẽ luôn có thể phân tích ngược lại thành một số thập phân bằng' CultureInfo.InvariantCulture'. Nếu bạn sử dụng 'CultureInfo.CurrentCulture' để tuần tự hóa, người dùng của bạn có thể có" en-US "làm nền văn hóa hiện tại của họ. Người dùng tiếp theo đi phân tích cú pháp trở lại số thập phân có thể có văn hóa hiện tại sử dụng dấu "," cho dấu phân cách. –
Văn hóa giả dựa trên tiếng Anh có hành vi được xác định. Tuyệt vời để viết ra, ví dụ, công cụ vào tập tin cấu hình để nó có thể được đọc và viết bất kể văn hóa người dùng đã xác định.
Về cơ bản đó là một nền văn hóa cụ thể nhân tạo và sẽ không thay đổi.
Cụ thể, bạn sẽ không bị phát hiện bởi việc sử dụng dấu phẩy và các điểm khác nhau trong các dạng chuỗi số, hoặc với các chuyển đổi trường hợp lẻ. –
Yess ... vấn đề điển hình cho: * Người lập trình người Mỹ nghĩ từ này là tiếng Anh;) Và sau đó khách hàng Đức viết 1.000,00 cho 1000;) Ouch. * Ngay cả trong cùng một ngôn ngữ, Thụy Sĩ và Đức ví dụ sử dụng "." và "," theo các cách khác nhau về số. Kết quả -> Tệp cấu hình là rác. Sử dụng ngôn ngữ bất biến ở đó;) – TomTom
Để thêm vào nhận xét của Steve: đó là văn hóa để sử dụng khi bạn không thực sự quan tâm đến mọi thứ * trông * (bạn không quan tâm việc sử dụng dấu phẩy hoặc điểm hay bất kỳ điều gì) sẽ không bao giờ nhìn thấy nó) nhưng bạn cần nó luôn luôn giống nhau (ví dụ như vì bạn cần để có thể đọc trong những gì bạn đã viết). – itowlson
Nó được sử dụng cho công cụ đó là như nhau không phân biệt văn hóa (mà không cần phải được dịch sang một số nền văn hóa X cho phù hợp)
như đối với một ví dụ - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx. Khi bạn viết một tệp ứng dụng cụ thể mà người dùng không nên lộn xộn, bạn nên sử dụng InvariantCulture cho tất cả các phương thức có tham số văn hóa.
Lưu ý rằng theo tài liệu liên kết ở trên:
Tuy nhiên, một ứng dụng nên sử dụng văn hóa bất biến duy nhất cho quy trình đòi hỏi kết quả văn hóa độc lập, chẳng hạn như định dạng và phân tích dữ liệu được tồn vào một tập tin.
Điều này nói lên hệ quả rằng văn hóa bất biến chỉ nhằm định dạng trung gian, tức là nếu bạn hiển thị nội dung cho người dùng là đầu ra của văn hóa bất biến (nghĩa là 'trong' nền văn hóa bất biến), bạn làm điều gì sai và không hiểu văn hóa bất biến. – mlhDev
Văn hóa bất biến không nhạy cảm về văn hóa; nó có thể được kết hợp với ngôn ngữ tiếng Anh nhưng không phải với bất kỳ quốc gia/khu vực nào.Bạn có thể sử dụng văn hóa bất biến đối với các hoạt động chuỗi nhạy cảm với văn hóa không bị ảnh hưởng bởi các quy ước của văn bản luồng hiện tại và nhất quán giữa các nền văn hóa.
CultureInfo.InvariantCulture truy xuất phiên bản của văn bản bất biến . Nó có thể được sử dụng trong hầu hết mọi phương thức trong không gian tên System.Globalization yêu cầu một nền văn hóa. Các đối tượng được trả về bởi các thuộc tính như CompareInfo, DateTimeFormat và NumberFormat cũng phản ánh chuỗi so sánh và định dạng các quy ước về văn hóa bất biến.
Không giống như các dữ liệu văn hóa nhạy cảm, mà có thể thay đổi bằng cách sử dụng chỉnh hoặc bằng cách cập nhật cho .NET Framework hoặc hệ điều hành , bất biến dữ liệu văn hóa là ổn định theo thời gian và qua nền văn hóa cài đặt và không thể được tùy chỉnh bởi người dùng. Điều này làm cho văn hóa bất biến đặc biệt hữu ích cho các hoạt động yêu cầu các kết quả độc lập về văn hóa, chẳng hạn như định dạng và phân tích hoạt động lưu giữ dữ liệu định dạng hoặc sắp xếp và sắp xếp các hoạt động mà yêu cầu dữ liệu được hiển thị theo thứ tự cố định bất kể văn hóa.
Thuộc tính InvariantCulture đi kèm tiện dụng khi bạn muốn hiển thị kiên trì dữ liệu trong một định dạng văn hóa độc lập. Ví dụ:
Ví dụ: nếu bạn muốn hiển thị số hoặc ngày giờ trong định dạng cụ thể độc lập với văn hóa hiện tại của ứng dụng, bạn có thể sử dụng CultureInfo.InvariantCulture.
-1 vì tôi chắc chắn sẽ không hiểu hầu hết lời giải thích này mà không cần phải đọc những lời giải thích ở trên. Nó không rõ ràng, theo ý kiến của tôi, những gì * "hoạt động chuỗi nhạy cảm với văn hóa không bị ảnh hưởng bởi các quy ước của văn hóa luồng hiện tại và nhất quán giữa các nền văn hóa" * có nghĩa là, và tôi vẫn chưa chắc chắn 100% những gì bạn có nghĩa là để viết trong câu sau khi báo giá (* "hiển thị dữ liệu kiên trì" * rõ ràng là một lỗi đánh máy, nhưng tôi không biết cho những gì). –
Đó là tiếng Anh, nhưng không được liên kết với bất kỳ vị trí nào. –