我目前正在将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
即使使用visualbasic.conversion.dll中的“Val”,也不会像vb6一样工作是否有人解决了这个问题? c#解决方案最好。
答案 0 :(得分:5)
我对此VisualBasic.Conversion.dll
一无所知(google也没有),但Microsoft.VisualBasic
命名空间(在Microsoft.VisualBasic.dll
中)是核心框架的一部分,完全正常可以接受使用C#。还有其他不错的宝石(即TextFieldParser
),但这应该具有您需要的确切Val()
实现。
如果这是你已经尝试过的库而且看起来不对,那么我再去看看它上面的单元测试。
除此之外,C#中用于将字符串转换为整数的可接受方式是int.Parse()
,int.TryParse()
和Convert.ToInt32()
。但是,无论喜欢与否,Val()
库中的Microsoft.VisualBasic.dll
函数是您将为代码的现有行为找到的最接近的匹配。
答案 1 :(得分:4)
以上都没有满足我的需求,所以我写了以下内容:
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);
}
测试数据的结果:
"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
答案 2 :(得分:1)
查看此网站:http://www.dreamincode.net/forums/topic/36064-val-replacement/其他人举例说明如何实现自己的Val()函数。
答案 3 :(得分:1)
c#中没有完全等效的vb6 val函数。但是可以在c#中使用Microsoft.VisualBasic命名空间来使用此函数。
要在c#中使用val()函数,请添加Microsoft.VisualBasic命名空间并使用以下代码:
Conversion.Val("09sdf");
答案 4 :(得分:0)
从您的示例中可能看起来与此类似。但由于我不知道VB val
规范,它可能无法正确处理所有字符串。
Decimal ParseNumerString(string s)
{
Decimal value=0;
Decimal multiplier=1;
bool decimalPart=false;
foreach(char c in s)
{
if(IsDigit(c))
{
int i=ParseDigit(c);
if(!decimalPart)
{
value=value*10+i;
}
else
{
muliplier/=10;
value=value+multiplier*i;
}
if(c=='.')
decimapPart=true;
}
return value;
}
这是伪代码,你需要实现解析数字并且是自己的数字(微不足道)。我选择Decimal
作为内部表示,因为这样我在小数部分不会出现奇怪的舍入错误。
答案 5 :(得分:0)
您可以使用Convert static class。它非常接近Val(),但您需要指定转换为类型。它在System命名空间中。
E.g:
int x = Convert.ToInt32("23");
int y = Convert.ToDouble("23.342");
http://msdn.microsoft.com/en-us/library/system.convert(v=vs.71).aspx