Visual Studio 2015封装字段

本文关键字:字段 封装 2015 Studio Visual | 更新日期: 2023-09-27 18:15:06

在Visual Studio 2013中,当我封装以 i 字母开头的字段时。它生成一个以开头的属性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;
    }
}

我怎样才能改变这种行为?我使用土耳其键盘,如果它是相关的,系统文化是土耳其

Visual Studio 2015封装字段

您输入的是土耳其文i,而不是英文i。

这似乎是重构代码的一个调试,当将第一个字母转换为大写时,它没有以安全的方式处理用户的文化。

土耳其语的i是最常见的例子之一,用于展示文化之间的差异,因为I是' ý的大写。例如,请查看MSDN中的"编写文化安全托管代码"文章。

当您想要输入拉丁变量名时,请确保您已将键盘切换为英语。

正如OP所评论的那样,结果不受键盘语言的影响,而是受用户的区域设置的影响。这意味着负责封装字段的Roslyn重构使用当前CultureInfo而不是不变的CultureInfo来执行ToUpper调用。

Roslyn重构是开源的,所以很容易找到相关的代码。在AbstractEncapsulateFieldService.cs中,GeneratePropertyName方法调用char.ToUpper而不指定区域性:

return char.ToUpper(baseName[0]).ToString() + baseName.Substring(1);

应该很容易修改为:

return char.ToUpper(baseName[0],CultureInfo.InvariantCulture).ToString() 
      + baseName.Substring(1);

我在罗斯林的网站上打开了一个问题。

更新2

不幸的是,该问题被关闭为"设计"。似乎关闭它的人混淆了用户的区域设置和编写文本

时使用的语言。