C# 如何检测Windows版本以解决'';或'';将字符串转换为双精度时出现问题?
我不得不用C#制作一个数字键盘,使用windows窗体接受并验证C# 如何检测Windows版本以解决'';或'';将字符串转换为双精度时出现问题?,c#,string,parsing,generics,double,C#,String,Parsing,Generics,Double,我不得不用C#制作一个数字键盘,使用windows窗体接受并验证double和int值,但是string用于double的格式在windows 7和10之间是不同的。这些是我仅有的可供测试的操作系统,我提出了一个过于严格的解决方案。代码如下,如果需要注释,请在注释中询问我。此外,如果问题标题听起来令人困惑或可能更广泛,请随意编辑,我自己也无法想出更好的答案 private static readonly string WIN_10 = "Microsoft Windows NT 6.2.
double
和int
值,但是string
用于double
的格式在windows 7和10之间是不同的。这些是我仅有的可供测试的操作系统,我提出了一个过于严格的解决方案。代码如下,如果需要注释,请在注释中询问我。此外,如果问题标题听起来令人困惑或可能更广泛,请随意编辑,我自己也无法想出更好的答案
private static readonly string WIN_10 = "Microsoft Windows NT 6.2.9200.0";
private static readonly string WIN_7SP1 = "Microsoft Windows NT 6.1.7601 Service Pack 1";
//(...)
//Event handler for the comma/dot button:
private void btDot_Click(object sender, EventArgs e)
{
var currentOS = Environment.OSVersion.VersionString;
//"sb" is a StringBuilder object that holds what's being "typed" in the numpad
if (sb.ToString().Contains(",") || sb.ToString().Contains(","))
return;
if (currentOS == WIN_7SP1)
sb.Append(",");
else if (currentOS == WIN_10)
sb.Append(".");
tbValue.Text = sb.ToString();
}
//(...)
最后,我必须进行以下转换:
returnValue = (T)Convert.ChangeType(sb.ToString(), typeof(T));
其中T
是int
或double
。如果我尝试在字符串中使用小数点分隔符,例如“2.2”,Windows 7将返回double
22,但在Windows 10中工作正常(double
2.2)。如果我使用逗号,Win7将返回预期值,但Win10将返回22
我想出了上面的解决办法,但有点糟糕。我想知道如何以正确的方式进行操作。我认为这与版本无关,而是与区域设置有关。请看这里: 固定的:
private void btDot_Click(object sender, EventArgs e)
{
char separator = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
if (sb.ToString().Contains(separator))
return;
sb.Append(separator);
tbValue.Text = sb.ToString();
}
我认为这与版本无关,而是与区域设置有关。请看这里: 固定的:
private void btDot_Click(object sender, EventArgs e)
{
char separator = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
if (sb.ToString().Contains(separator))
return;
sb.Append(separator);
tbValue.Text = sb.ToString();
}
我认为这与版本无关,而是与区域设置有关。看看这里:这两个平台都是英文平台,为什么
CultureInfo.CurrentUICulture.NumberFormat
会彼此不同呢?而且,上面的代码还管用。我会被诅咒的!它确实有效!好的,谢谢,我会把它作为一个回复,并给你学分!我自己加上它作为回答。谢谢我认为这与版本无关,而是与区域设置有关。看看这里:这两个平台都是英文平台,为什么CultureInfo.CurrentUICulture.NumberFormat
会彼此不同呢?而且,上面的代码还管用。我会被诅咒的!它确实有效!好的,谢谢,我会把它作为一个回复,并给你学分!我自己加上它作为回答。谢谢