永发信息网

c# 赋值疑问

答案:2  悬赏:30  手机版
解决时间 2021-02-04 13:39
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;

nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";

我的问题是现在的Thread.CurrentThread.CurrentCulture的NumberDecimalSeparator是默认的“.”, 还是“,", 为什么?
最佳答案
答案肯定是你新设置的分割符号" , "。
 
假如你写了这样一个程序,
using System;
using System.Threading;
using System.Globalization;
class Program
{
    static void Main()
    {
        CultureInfo nonInvariantCulture = new CultureInfo("en-US");
        Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
        nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";
        Console.WriteLine("Main thread, Current Culture {0}, Number Separator {1}",
            Thread.CurrentThread.CurrentCulture.Name,
            Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        // Prints  Main thread, Current Culture en-US, Number Separator ,
        Thread t = new Thread(new ThreadStart(DoWork));
        t.Start();
        t.Join();
    }
    static void DoWork()
    {
        Console.WriteLine("Work Thread, Current Culture {0}, Number Separator {1}",
            Thread.CurrentThread.CurrentCulture.Name,
            Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        // Prints  Main thread, Current Culture en-US, Number Separator .
    }
}最后输出的当然是",",因为当前的语言文化就是你新设置的“en-US"对象,而NumberDecimalSeparator得值被你强制的设置为","。
 
但是你其它线程还是使用系统默认的语言文化对象,所以只能说你当前线程的语言环境是你新建的"en-US"语言文化对象。
 
如果你的系统region也是"en-US",但他们使用的是不同的语言文化对象,所以结果也是不同的。具体可以看我给你的例子。
全部回答
1. string 是引用类型 引用类型操作 当使用重载操作符”=”给string对象赋值时,string的对象是引用类型,它保留在堆上,而不是堆栈上.因此,当把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用.例如,修改其中一个字符串,就会创建一个全新的string对象(注意,这个过程发生在”=”中),而另一个字符串没有改变.考虑下面的代码: public class myclass { public static void main() { string str1 = "i am a number"; string str2 = str1; console.writeline("str1 = "+str1); console.writeline("str2 = "+str2); str1 = "i am another number"; console.writeline("after str1 changed... str1 = "+str1); console.writeline("after str1 changed... str2 = "+str2); console.readline(); } } output : str1 = i am a number str2 = i am a number after str1 changed...str1 = i am another number after str1 changed...str2 = i am a number 具有值类型特征的操作 string有两种情况下的操作是具有值类型特征的: 1) 在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型; 2) str1 == str2 ,仅仅是比较了值,而非地址(是ms重写了==运算符所致). 总结: string 到底是引用类型还是值类型 答:引用类型 . 只不过它在某此操作上会表现出值类型的特征. string类型的另外一个特殊性在于它是“不会变”的,每次操作string,都相当于新建了一个string对象.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
小树圩在什么地方啊,我要过去处理事情
推荐几个海淀可靠的房屋中介公司
【ted2】...furthertests.A.withdrawnB.cance
写一个db2 的function函数,具体,如对表里的
The doctor recommended that you swim after
大神们,dnf大转移后,还有娃娃机吗,在哪里?
国家现在要求烧秸秆煤炭了么?家里烧锅炉来了
日历表上一竖排上连续的3个数字之和为30 这三
有没有复制电信手机卡
左眼725度,散光150,右眼650度散光100,配隐
茶作CHAmaker地址在什么地方,我要处理点事
天利五金机电地址在什么地方,想过去办事
荀子的《劝学》有言:“蓬生麻中,不扶自直;
深圳最近有哪家领跑打折?多少折?有没有新货
萍乡市城市管理监察支队地址好找么,我有些事
推荐资讯
我不想让某些QQ好友看到我发的QQ说说和心情.
【珍贵的近义词和反义词】珍贵的近反义词
虫胶片,石蜡的作用是什么?
感冒鼻塞的情况下能吃巧克力么?会不会上火?
巴盟土里乡铁锅居NO.5地址有知道的么?有点事
开车在山东临沂到黑龙江牡丹江走国道有收费站
大悦城歌友会ktv多少钱一小时?
素颜mv开头是一男一女在ktv里唱歌 ,开始那个
有没像鸿言人脉管理软件一样的免费人际关系软
人总是在欺骗和背叛中成长?
当涂城关地税分局地址好找么,我有些事要过去
单位阶跃函数信号具有:A.周期性B.抽样性C.单
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?