C# Visual Studio 2015封装字段
在Visual Studio 2013中,当我封装一个以C# Visual Studio 2015封装字段,c#,.net,visual-studio,unicode,C#,.net,Visual Studio,Unicode,在Visual Studio 2013中,当我封装一个以I字母开头的字段时。它生成一个以字母开头的属性 int inside = 0; public int Inside { get { return inside; } set { inside = value; } } 但在Visual Studio 2015中,如果我封装同一字段,它将生成一个以字母开头的属性。应用一些缩进规则并在get和set修饰符之间添加空格 int inside = 0; public int
I
字母开头的字段时。它生成一个以字母开头的属性
int inside = 0;
public int Inside
{
get { return inside; }
set { inside = value; }
}
但在Visual Studio 2015中,如果我封装同一字段,它将生成一个以字母开头的属性。应用一些缩进规则并在get和set修饰符之间添加空格
int inside = 0;
public int İnside
{
get
{
return inside;
}
set
{
inside = value;
}
}
我怎样才能改变这种行为?我使用的是土耳其语键盘,如果它是相关的,并且系统文化是土耳其语的您错误地键入了土耳其语I,而不是英语I
这似乎是对重构代码的调试,在将第一个字母转换为大写字母时,无法以安全的方式处理用户的区域性
土耳其语i
是用来表示不同文化之间差异的一种语言,因为i
是“ý”的大写字母。例如,检查MSDN中的文章
要键入拉丁变量名,请确保已将键盘切换为英语
正如OP所评论的,结果不受键盘语言的影响,而是受用户的语言环境的影响。这意味着负责封装字段的Roslyn重构使用当前的CultureInfo而不是不变的CultureInfo执行ToUpper
调用
Roslyn重构是开源的,因此很容易找到相关的代码。在中,GeneratePropertyName
方法在不指定区域性的情况下调用char.ToUpper
:
return char.ToUpper(baseName[0]).ToString() + baseName.Substring(1);
应易于将其更改为:
return char.ToUpper(baseName[0],CultureInfo.InvariantCulture).ToString()
+ baseName.Substring(1);
更新
我在Roslyn的网站上看到过
更新2
不幸的是,这个问题以“故意”结束。似乎无论是谁关闭它,都会将用户的区域设置与编写文本时使用的语言相混淆谢谢您的回答。这似乎不是键盘的问题,而是区域设置的问题。如果我将区域设置从“控制面板>区域和语言>格式”更改为英语,它似乎可以按预期工作。我相信2015是使用系统区域设置而不是2013。如果使用美国键盘和土耳其语格式,也会发生同样的事情吗?是的,键盘设置不会改变任何声音,就像它们添加了任何程序员认为bug的“特性”一样。Roslyn中的重构是由Roslyn执行的,因此问题很可能是在那里引入的——在不指定
InvariantCulture
的情况下执行案例更改。具体地说,在不指定区域性的情况下调用char.ToUpper