我有一个非常古老的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
有什么建议吗?
(重新编辑删除Hold)感谢jmcilhinney回答:-)
所有四个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实际上引入了一个If
运算符,其工作方式与C#三元运算符非常相似,所以从那时起你就应该使用它,例如代替:
myVar = IIf(someBooleanExpression, someValue, someOtherValue)
你应该一直在使用:
myVar = If(someBooleanExpression, someValue, someOtherValue)
IIf
和If
之间存在一些微妙的差异,但我会让您了解If
如何为自己工作。