我有一个非常古老的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的回答: - )
答案 0 :(得分:3)
IsNumeric
,IsNothing
,IsDBNull
和IIf
中的所有四个都是特定于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)
IIf
和If
之间存在一些微妙的差异,但我们会让您了解If
对您自己的作用。