在C#中保留或重写VB的Val转换后模拟

时间:2016-04-01 14:35:33

标签: c# .net vb.net code-conversion

我最近接手了一个170k的VB.net项目,并被指示将其带入C#。没有时间进行完全重写,我测试了几种转换工具。我最终使用了Tangible的Instant C#,它实际上做了一件令人难以置信的工作。经过几个小时的错误修复后,它会编译并且(大部分)正常工作。

由于C#与VB Val没有等价,转换器使用以下方法创建了SimulateVal辅助类:

public static double Val(string expression)
{
    if (expression == null)
        return 0;

    //try the entire string, then progressively smaller
    //substrings to simulate the behavior of VB's 'Val',
    //which ignores trailing characters after a recognizable value:
    for (var size = expression.Length; size > 0; size--)
    {
        double testDouble;
        if (double.TryParse(expression.Substring(0, size), out testDouble))
            return testDouble;
    }

    //no value is recognized, so return 0:
    return 0;
}
在整个VB程序中使用了

Val。因此,这些辅助方法被多次调用。

在搜索更多信息和其他选项时,我找到了this discussion,其中包含来自有形物的回复,显示了此助手类。但是,我还没有找到进一步的讨论。

将这个帮助程序类保留到位并只使用帮助程序类是否足够?在C#中寻找另一种处理方法会更好吗,或者这是一个足够轻的解决方案留下来?

1 个答案:

答案 0 :(得分:0)

帮助程序类旨在涵盖原始VB' Val'盖子。如果你使用了' Val'并不依赖于原始的VB特性,那么您可以用简单的TryParse替换。

请注意,' Val'不仅仅是一个简单的TryParse。

你也可以检查原来的VB' Val'代码可以确切地了解它正在做什么 - 可能比帮助类正在做的更多。