2015-12-11 59 views
-3

更新:奇怪的行为在C#:解析字符串双打错误

这里是一个失败的是即使是在明确2015年VS CE .NET 4.6双项目的链接。 https://dl.dropboxusercontent.com/u/20941617/Scratchpad.zip

好吧我知道如何复制它。当它在明确的操作符代码块中断时,您只需将该字符串从调试中直接复制并粘贴到'a'中,即使它看起来像普通字符串,它也会中断。

double a = double.Parse("1"); 
double b = double.Parse("1"); 

原文:

为什么 'A' 的工作,但 'B' 抛出一个异常: “输入字符串的不正确的格式。”?

double a = double.Parse("1"); 
var b = double.Parse("1"); 

下面的情况也会发生同样的异常。

Number n = (Number)"‎1"; 

Number是我自定义的数据类型(结构)。它无法将字符串解析为双精度。

public static explicit operator Number(string n) 
{ 
     double x = double.Parse(n); 
     return new Number(x); 
} 

更奇怪的是,我将我的结构复制到了一个我为复制错误而创建的新项目中。但是...在具有相同结构的原始项目中,它不会抛出异常。

我从文本文件加载常量并将它们转换为数字就好了。这些常量的工作:

pi,3.14159265358979323846,none 
π,3.14159265358979323846,none 
golden ratio,1.61803398874989484820,none 
phi,1.61803398874989484820,none 
φ,1.61803398874989484820,none 

但是,当它达到这个常数,它会引发同样的异常。

Euler's constant,0.577215664901532860606512,none 

它还抛出它的“0.1”,但不是所有的时间......这真的很令人困惑,这就是为什么我做了一个新的项目,但由于某些原因,新项目的行为不同。

我在所有项目中都使用.NET 4.6。我最初使用5.4.2,但改变了它。这两个版本的问题似乎都是一样的。

+0

第一代码片段运行没有问题,(http://ideone.com/172M50),因此OP必须曳我们。拒绝再看。 –

+0

是什么让你认为你制作的自定义结构能够投射字符串? –

+0

@LukePark没关系,因为他为此定义了一个操作符。 –

回答

1

这是一个隐藏字符的通常的拷贝/粘贴问题

在代码

,“1”的长度为b为2个字符

第一chacracter是Unicode 8206,而第二个49这是1

做一些清洁和它应该工作

+0

谢谢。所以现在只是操作员代码块很奇怪。 我想在代码块外面测试它,看它是否有不同的行为,但是在故障排除过程中,我从调试中复制/粘贴,并且在事情开始变得混乱的时候。 – XSapien

+0

我假设原来的问题是不同的,但它似乎是同一个问题。我复制并粘贴常量到记事本中,保存它,收到消息说它是unicode,并且我将丢失信息,关闭它,打开它并发现: gamma,?0.577215664901532860606512,none – XSapien