从net471到.NET标准noob问题[关闭]

问题描述 投票:-2回答:1

我有一个非常古老的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回答:-)

vb.net migration .net-standard
1个回答
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实际上引入了一个If运算符,其工作方式与C#三元运算符非常相似,所以从那时起你就应该使用它,例如代替:

myVar = IIf(someBooleanExpression, someValue, someOtherValue)

你应该一直在使用:

myVar = If(someBooleanExpression, someValue, someOtherValue)

IIfIf之间存在一些微妙的差异,但我会让您了解If如何为自己工作。

© www.soinside.com 2019 - 2024. All rights reserved.