保留或返工 Post-VB 的 Val 在 C# 中的转换模拟
Keep or Rework Post-Conversion Simulation of VB's Val in C#
我最近接手了一个 170k 行的 VB.net 项目,并受命将其引入 C#。没有时间完全重写,我测试了几种转换工具。我最终使用了 Tangible 的 Instant C#,它实际上完成了令人难以置信的工作。经过几个小时的错误修复后,它可以编译并(大部分)正常工作。
由于 C# 没有 VB 的 Val
等效项,转换器创建了一个 SimulateVal
帮助程序 class,方法如下:
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;
}
Val
在整个 VB 程序中被使用。因此,这些辅助方法会被多次调用。
在搜索更多信息和其他选项时,我找到了 this discussion,其中包含显示此助手 class 的 Tangible 的回复。但是,我一直找不到更多的讨论。
将此助手 class 留在原地并仅使用助手 class 就足够了吗?在 C# 中寻找一种处理此问题的替代方法会更好吗,或者这是一个足够轻便的解决方案,可以留在原地吗?
助手 class 旨在涵盖原始 VB 'Val' 涵盖的一些奇怪情况。如果您对 'Val' 的使用不依赖于原始的 VB 特性,那么您也许可以用简单的 TryParse 替换。
请注意,'Val' 做的不仅仅是一个简单的 TryParse。
您还可以检查原始 VB 'Val' 代码以确切了解它在做什么 - 可能甚至比助手 class 所做的还要多。
我最近接手了一个 170k 行的 VB.net 项目,并受命将其引入 C#。没有时间完全重写,我测试了几种转换工具。我最终使用了 Tangible 的 Instant C#,它实际上完成了令人难以置信的工作。经过几个小时的错误修复后,它可以编译并(大部分)正常工作。
由于 C# 没有 VB 的 Val
等效项,转换器创建了一个 SimulateVal
帮助程序 class,方法如下:
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;
}
Val
在整个 VB 程序中被使用。因此,这些辅助方法会被多次调用。
在搜索更多信息和其他选项时,我找到了 this discussion,其中包含显示此助手 class 的 Tangible 的回复。但是,我一直找不到更多的讨论。
将此助手 class 留在原地并仅使用助手 class 就足够了吗?在 C# 中寻找一种处理此问题的替代方法会更好吗,或者这是一个足够轻便的解决方案,可以留在原地吗?
助手 class 旨在涵盖原始 VB 'Val' 涵盖的一些奇怪情况。如果您对 'Val' 的使用不依赖于原始的 VB 特性,那么您也许可以用简单的 TryParse 替换。
请注意,'Val' 做的不仅仅是一个简单的 TryParse。
您还可以检查原始 VB 'Val' 代码以确切了解它在做什么 - 可能甚至比助手 class 所做的还要多。