c# - 如何在常规字符串上打印 .NET String.Format 空格字符?

标签 c# string .net-core

我正在 .Net Core 中处理字符串。我有一个使用 :n 格式化的字符串,格式化后输出为 123 456,00。我想断言格式化的字符串等于我希望的字符串,但我得到一个 Assert.Equal Failure() 并且问题出在空格字符中。在输出中它断言这两个空格是不同的。

这是我的代码:

public void Separator()
{
    var str = string.Format("{0:n}", 123456);
    Assert.Equal("123 456,00",str);
}

我还将格式化字符串中的空格字符与带有断言的常规空格字符进行了如下比较 Assert.Equal(' ',str[3]);我得到预期值为0x00a

为什么会发生这种情况?如何在不使用 string.Format() 的情况下获得相同的字符?

最佳答案

您使用的区域性指定数字组分隔符是不同于空格的 ASCII 字符。我猜你在这里使用的是 ru-RU,这意味着数字是 ASCII 字符 160,这意味着如果你刚刚键入一个空格,这些字符串将不匹配。

例如,您可以用区域性分隔符替换空格:

var currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
var stringToCompare = "123 456,00".Replace(
    " ", 
    currentCulture.NumberFormat.NumberGroupSeparator);

Assert.Equal(stringToCompare, str);

关于c# - 如何在常规字符串上打印 .NET String.Format 空格字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815995/

相关文章:

c# - WorkflowInvoker.Invoke - Literal 仅支持值类型和不可变类型 System.String

c++ - 检查 switch 语句中的字符串结尾

c# - Ubuntu 19.10 中的 dotnet ef 迁移问题。点网SDK 3.1.1

c# - 用多个 byte[] 填充一个 byte[]

c# - 在上传期间或上传后加密文件

c# - 为 32 位 DLL 编写 COM/ATL 包装程序的正确方式

python - 将字符串差异与字符串列表进行比较

c# - 从字符串中的字符位置获取行号的最简单方法是什么?

c# - 在 Linux Python 中使用 .NET Core 库

c# - 如何在 WPF WebView2 中禁用 CORS