- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个错误报告,其中 double.Parse(input)
在输入 "0.69803923368454"
时抛出以下异常:
FormatException: Unknown char: .
System.Double.Parse (System.String s, NumberStyles style, IFormatProvider provider) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Double.cs:209)
System.Double.Parse (System.String s) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Double.cs:180)
经过一些搜索,似乎当默认区域性不支持小数字符 时会出现此问题。
(参见 float.Parse fails on decimals and commas );
我需要创建一个单元测试,通过在测试期间强制使用不同的默认区域性来重现此问题。当然,这不能干扰任何现有的单元测试。我正在使用随 Visual Studio 一起提供的单元测试框架。
这是我尝试过的方法,但不幸的是,这不会导致报告的错误发生:
[TestMethod]
private void DoubleParseWithCultureOverride() {
var restoreCulture = Thread.CurrentThread.CurrentCulture;
var restoreUICulture = Thread.CurrentThread.CurrentUICulture;
try {
// Arrange
Thread.CurrentThread.CurrentCulture = new CultureInfo("ko-KR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ko-KR");
// Act
double value = double.Parse("0.69803923368454");
// Assert
Assert.AreEqual(0.69803923368454, value);
}
finally {
Thread.CurrentThread.CurrentCulture = restoreCulture;
Thread.CurrentThread.CurrentUICulture = restoreUICulture;
}
}
我原以为上面的单元测试会失败(即在测试资源管理器面板中变成红色),但它通过了。目前我纯粹是试图用标准的 Mono/.NET 用法强制错误。我打算用特定于应用程序的逻辑替换“Act”部分。
最佳答案
您刚刚选择了一种恰好使用 .
作为小数点的文化:
var culture = new CultureInfo("ko-KR");
Console.WriteLine(culture.NumberFormat.NumberDecimalSeparator); // Prints .
我通常为此使用法语 (fr-FR
) - 而您当前的代码确实失败了。
或者,您可以构建自己的 CultureInfo
专门用于测试,使用您想要的任何分隔符。
对于这样的测试,您可能还需要一种更简单的方式来设置文化。选项:
编写一个方法来执行在文化“内部”执行的操作,然后将其命名为:
ExecuteInCulture("fr-Fr", () =>
{
// Parse a double, or whatever
});
创建一个 IDisposable
实现,它设置文化并在 Dispose
上恢复它:
using (CultureHelper.SetCulture("fr-FR"))
{
// Parse a double, or whatever
}
前一种方法可能更简洁 - 这并不是说您真的在这里获得了“资源”。
关于c# - CurrentThread.CurrentCulture 和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24243774/
我见过许多具有如下所示的线程过程的示例。 private void ThreadProc() { while (serviceStarted) {
当前Thad.sleep的实现是:。currentThread是native方法。在多核系统中,我们可以同时运行多个线程。。那么当前的主题是如何决定的呢?
当前Thad.sleep的实现是:。CurrentThread是本机方法。在多核系统中,我们可以同时运行多个线程。。那么当前的主题是如何决定的呢?
我有一个面向全局市场的应用程序,需要本地化。在开发过程中,我遇到了一些问题,即使我更改了语言环境,我的附属程序集似乎也从未被选中。经过一些研究,我现在明白了为什么会这样,并且能够通过在代码中设置 Cu
我试图通过为它们分配名称来识别一些线程(属性:System.Threading.Thread.CurrentThread.Name),但后来我意识到我可以使用 System.Threading。线程.
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我有一个 Runnable 队列,它在指定线程中一个一个地调用。 val queue = LinkedBlockingQueue Unit>() val queueThread = thread {
我想从方法currentThread()中的doc开始: Returns a reference to the currently executing thread object. @return t
有一个名为Data的类,它被称为我的其他类。 Data 类被许多线程访问,我想在每个线程上存储一些信息。具体来说,Data 有一个名为 name(String) 的实例,我想将此 name 存储到创建
在我的调试器上花费了太多时间之后,我偶然发现了一些我还不清楚的有趣的东西。我希望有更多 Java 经验的人来解释和确认这一点: 我没有每次都使用Thread.currentThread().isInt
我可以做 ConcurrentHashMap存储线程的数据并使用 Thread.currentThread()取回它?我检查了Java源码,发现currentThread()是本地的并且 equals
在下面的代码中: ThreadStart ts = new ThreadStart((MethodInvoker)delegate { executingThr
我有一个错误报告,其中 double.Parse(input) 在输入 "0.69803923368454" 时抛出以下异常: FormatException: Unknown char: . Sys
在 .NET BCL 中,有一个 CurrentThread 和一个 ProcessThread 对象。这些有什么区别? 谢谢 最佳答案 这是设计 .NET 2.0 时 SQL Server 项目的后
谁能解释一下[NSThread currentThread]返回值的含义? NS日志 NSLog(@"%@", [NSThread currentThread]); 结果 {name = (null)
你能告诉我 Thread.currentThread().getContextClassLoader() 和 TestServlet.class.getClassLoader() 之间的区别是什么,不
Thread.currentThread() 是一个static 方法,它提供对当前正在执行的 Thread 的引用(基本上是对“this”线程的引用)。 在静态方法中访问非静态成员(尤其是 this
在较旧的 asp.net 项目中,我们通常在 Application_BeginRequest - 处理程序 (Global.asax) 中设置语言,如下所示: System.Threading.Th
我可以制作 Dictionary存储线程的数据并使用 Thread.CurrentThread 检索它? 最佳答案 可以,但您还需要同步(因为 Dictionary 不是线程安全的)。 备选方案: T
我是一名优秀的程序员,十分优秀!