是否可以将vb6"Val()"转换为c#?

Adi*_* Om 2 c# vb.net

我目前正在将vb和vb.net转换为c#但有问题.我非常希望不要在转换后的代码中使用visualbasic dll,并且到目前为止一直这样做.

但是这段代码

Dim x as Double    'this was error saying it was integer
x = Val("1 23 45 x 6")  ''#x is  12345
x = Val("1..23")    ''#x is 1.23
x = Val("1 1,,,,,2,2..3") ''#x is 1122.3
Run Code Online (Sandbox Code Playgroud)

即使使用visualbasic.conversion.dll中的"Val"也不会像vb6一样工作是否有人解决了这个问题?c#解决方案是最好的.

Joe*_*orn 5

我对此一无所知VisualBasic.Conversion.dll(谷歌也不知道),但Microsoft.VisualBasic名称空间(in Microsoft.VisualBasic.dll)是核心框架的一部分,完全可以接受并且可以从C#中使用.还有其他不错的宝石(即TextFieldParser),但这应该具有Val()您需要的确切实现.

如果这是你已经尝试过的库而且看起来不对,那么我再去看看它上面的单元测试.

这个之外,在C#中接受的方式为字符串转换为整数是int.Parse(),int.TryParse()Convert.ToInt32().但是,无论喜欢与否,库中的Val()函数Microsoft.VisualBasic.dll是您将为代码的现有行为找到的最接近的匹配.


eri*_*osg 5

以上似乎都不能满足我的需求,所以我写了以下内容:

public static Double Val(string value)
{
    String result = String.Empty;
    foreach (char c in value)
    {
        if (Char.IsNumber(c) || (c.Equals('.') && result.Count(x => x.Equals('.')) == 0))
            result += c;
        else if (!c.Equals(' '))
            return String.IsNullOrEmpty(result) ? 0 : Convert.ToDouble(result);
    }
    return String.IsNullOrEmpty(result) ? 0 : Convert.ToDouble(result);
}
Run Code Online (Sandbox Code Playgroud)

测试数据结果:

"0 1 5.2123 123.123. 1 a" 返回 15.21233123

" 1 5.2123 123a" 返回 15.21233123

"a1 5.2123 123.123. 1 a" 返回 0

"" 返回 0