从net471到.NET标准的noob问题

时间:2017-12-31 23:30:39

标签: vb.net migration .net-standard

我有一个非常古老的VB项目,我正在寻求现代化,我创建了一个新的解决方案(稍后将代码转换为C#),我将库和Web项目重新添加到新的解决方案中以消除旧项目有旧的.publishproj,对mscorlib 2.0的引用(尽管通过重新添加引用尽力解决)和其他一些可能会消失的问题。

在这个过程中,我想尝试使用标准化PCL的.NET Standard,以便将来可以使用Xamarin,Mono等。我不完全熟悉.NET Standard,因此需要一些输入(尝试2.0)基于我阅读的2.0缩放效果)

我遇到的问题是:

1)我有几个.NET Framework的基本CORE函数,这些函数在.NET Standard中无法识别:

IsNumeric,IsNothing,IsDBNull,IIF

关于为什么会这样做的任何建议?

(重新编辑以删除保留) 感谢jmcilhinney的回答: - )

1 个答案:

答案 0 :(得分:3)

IsNumericIsNothingIsDBNullIIf中的所有四个都是特定于VB的。如果他们在没有引用Microsoft.VisualBasic程序集的情况下从未被其他语言访问过,则他们不能成为.NET Standard的一部分。你真的不应该以前使用它们,因为它们是VB6的保留。

如果是IsNumeric,则无论如何都会在内部使用Double.TryParse。事实上,Double.TryParse专门用于改善IsNumeric的效果。如果您想知道TryParse是否可以转换为该类型,您应该自己使用相应数字类型的String方法。

对于IsNothing,您应该只是将您对Nothing的引用进行比较,例如而不是:

If IsNothing(myThing) Then

你应该使用:

If myThing Is Nothing then

IsDBNull的情况下,你应该做的很多,例如而不是:

If IsDBNull(myThing) Then 

你应该使用:

If myThing Is DBNull.Value Then

也就是说,DataRow和数据阅读器都有自己的专用方法来告诉你它们的一个字段是否为NULL。

IIf的情况下,它始终存在问题,因为在许多情况下,人们试图像操作员一样对待这种方法。我认为是VB 2008实际上确实引入了一个{C}三元运算符的If运算符,所以从那时起你应该使用它,例如而不是:

myVar = IIf(someBooleanExpression, someValue, someOtherValue)

你应该一直在使用:

myVar = If(someBooleanExpression, someValue, someOtherValue)

IIfIf之间存在一些微妙的差异,但我们会让您了解If对您自己的作用。