2013-10-24 122 views
1

IntPtr的值與int進行比較的正確方法是什麼?正確比較IntPtr與int

IntPtr ContainerBaseAdress = ReadmemoryProperply.ReadProcessPointer(Tibia.Handle, ContainerPointer); 

if (ContainerBaseAdress.ToInt32() == 51) 
{ 
    //Executable code 
} 

或者

IntPtr ContainerBaseAdress = ReadmemoryProperply.ReadProcessPointer(Tibia.Handle, ContainerPointer); 

if (ContainerBaseAdress == (IntPtr)51) 
{ 
    //Executable code 
} 

或者

IntPtr ContainerBaseAdress = ReadmemoryProperply.ReadProcessPointer(Tibia.Handle, ContainerPointer); 

if (ContainerBaseAdress == new IntPtr(51)) 
{ 
    //Executable code 
} 

或者基本上,什麼是一個IntPtr的值與一個int比較合適的方式。

+1

我會說最後一個(因爲它可能不是一個32位指針)。 – Ryan

+1

如果您使用的是64位應用程序,則「IntPtr」將更像是「long」。它可能不會等於*任何*'int'。你確定這就是你想要做的? –

+1

你必須決定你想在64位上發生什麼。我們不能爲你做到這一點。 –

回答

3

你想使用哪一個取決於你想要的行爲。如果ContainerBaseAdress的值不適合32位整數,則第一個將拋出OverflowException。如果IntPtr指向某個地址並且正在64位CLR上運行,則很可能會發生這種情況。如果拋出一個異常是所需的行爲,那麼就去做吧。

第二個和第三個是等價的。演員只包裝new。但是這些不會拋出異常,他們只會評估錯誤。你選擇哪一種是文體偏好的問題。

+1

我認爲這是一件好事;) –

+0

@ReedCopsey我認爲它由OP決定他/她想要的行爲 - 評估爲false或拋出異常。 – vcsjones

+0

我重申了這一點,答案中的「意見」較少,只是陳述了行爲差異的事實。 – vcsjones