2016-11-07 138 views
2

Option Strict was off在我的VB应用程序中,所以现在我已经打开了它。我现在有一些错误,我就如何解决不确定:什么是将Double转换为Integer的最佳方式

pnlWait.Top = (Height - pnlWait.Height)/2 

在C#我只想做:

pnlWait.Top = (int)(Height - pnlWait.Height)/2; 

但是,这并不在VB中工作。我尝试Decimal.ToInt32,但后来抱怨,因为它正在创建一个Double与部门和没有Double.ToInt32Interger.Parse需要String,所以这不会有任何好处。

pnlWait.Top = Integer.Parse(((Height - pnlWait.Height)/2).ToString) 'Yeah, right! 

这让我觉得CTypeDirectCast可能是好的,但这些方法对许多对象工作,所以我不认为他们可能是有效的。

+1

我总是使用Convert.ToInt32([双]) – soohoonigan

+5

为该* *特别可以使用整数除法代码:'pnlWait.Top =(高度 - pnlWait.Height)\ 2' – Plutonix

+1

参考材料[类型转换函数(Visual Basic)](https://msdn.microsoft.com/en-us/library/s2dy91zy.aspx?f=255&MSPPError=-2147217396)建议使用语言实现的转换运算符并将其留给编译器以选择转换方法。我对构成最佳转换方法的构成有些矛盾。有些方法涉及四舍五入,您应该知道,其他方法可能会影响性能的调用链,我的建议是知道您使用的工具;即RTFM。 :) – TnTinMn

回答

0
pnlWait.Top = Convert.ToInt32((Me.Height - pnlWait.Height)/2) 
1

通过链接tinman发布后,我相信最好的选择是使用VB.Net特定的转换功能。我最初回避他们认为他们是从VB维持,但它似乎不是。当它提到它们被内联编译时,我被出售了,所以我将使用CInt和其他。

除了我的例子中,我将使用由Plutonix提供的建议。我完全忘了那个。

所以一般我会用

pnlWait.Top = CInt((Height - pnlWait.Height)/2) 

而且

If DR.Item(Mailings.WelcomePacket.SelectToMail) Then 

成为

If CBool(DR.Item(Mailings.WelcomePacket.SelectToMail)) Then 

除了

pnlWait.Top = (Height - pnlWait.Height) \ 2 

更清洁。

+0

我将使用带有整数除法的最后一个版本。 '(int)'向0进行舍入,但是'CInt'向四舍五入,即使是http://stackoverflow.com/questions/4181942/convert-double-to-int/4181954#comment68670590_4181954所以'3 \ 2'是1,但'如果转换为布尔值失败(例如'DBNull.Value'),那么'CBool​​(object)'会抛出Exception,所以我会推荐'object.Equals(True)'或'True.Equals (对象)' – Slai

相关问题