温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中CultureInfo之常用InvariantCulture的示例分析

发布时间:2021-08-30 09:22:43 来源:亿速云 阅读:151 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关C#中CultureInfo之常用InvariantCulture的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、CultureInfo的InvariantCulture的作用

(1)、CultureInfo使整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造成同一个数据的不同展现形式,尤其是读写两方的文化地区不同时,数据可能根本无法被正常读取或者产生潜在bug,因此这里,正是InvariantCulture的用武之地。

(2)、当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是不同的CultureInfo下,这些操作的结果可能会不一样。这里要介绍一下非常容易被忽视InvariantCulture。

2、使用场景

你编写一个程序,要向数据中心服务器传递一些时间数据,你会怎么写?直接DateTime.ToString()?那你就大错特错了,下面用代码,举个非常形象的例子。在一个控制台里,模拟数据中心,然后放出多个线程,模拟客户端程序传递数据。

static readonly string[] CultureSources = { "en-us", "zh-cn", "ar-iq", "de-de" };
        static readonly Random Ran = new Random(Environment.TickCount);
        static void Main()
        {
            Console.WriteLine("数据中心开始接受客户端数据:");
            for (int i = 0; i < CultureSources.Length; i++)
                ThreadPool.QueueUserWorkItem(Client, i);
            Console.ReadKey(true);

            Console.WriteLine("");
            Console.WriteLine("数据中心:…………");
        }

        static void Client(object obj)
        {
            int id = (int)obj;
            Thread.Sleep(Ran.Next(1000));

            CultureInfo cul = CultureInfo.GetCultureInfo(CultureSources[id]);
            Thread.CurrentThread.CurrentCulture = cul;
            Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToShortDateString());
        }

C#中CultureInfo之常用InvariantCulture的示例分析

同样的DateTime.ToShortDateString(),在英语-美国,中文-中国,阿拉伯语-伊拉克和德语-德国的不同环境下,1990年10月27日竟然有如此不同的输出结果,这些数据让数据中心服务器情何以堪啊!!!

造成这个情况的原因是:在进行日期时间输出时,.NET会考虑当前线程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),并根据CultureInfo,进行相应地区文化的数据处理。注意不要和UICulture混淆。

解决方案就是使用这个特殊的InvariantCulture.解决代码如下:

Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToString(CultureInfo.InvariantCulture.DateTimeFormat.ShortDatePattern, CultureInfo.InvariantCulture));

C#中CultureInfo之常用InvariantCulture的示例分析

ok,这样不管客户端运行在什么语言环境下,输出的时间格式都是统一的,方面数据中心服务器对数据做后续处理。这样所有的输出结果都保持一致了。

感谢各位的阅读!关于“C#中CultureInfo之常用InvariantCulture的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI