IntPtr.Zero Campo

Definição

Um campo somente leitura que representa um inteiro com sinal que foi inicializado como zero.

public static readonly IntPtr Zero;

Valor do campo

IntPtr

Comentários

O valor desse campo não é equivalente a null. Use esse campo para determinar com eficiência se uma instância de IntPtr foi definida como um valor diferente de zero.

Por exemplo, suponha que a variável, ip, seja uma instância de IntPtr. Você pode determinar se ele foi definido comparando-o com o valor retornado por um construtor, por exemplo: " if ip != new IntPtr(0)... ". No entanto, invocar um construtor para obter um ponteiro não inicializado é ineficiente. É melhor codificar " " if ip != IntPtr.Zero... ou " if !IntPtr.Zero.Equals(ip)... ".

Ao chamar a API do Windows do código gerenciado, você pode passar IntPtr.Zero em vez de null se espera-se que um argumento seja um ponteiro ou um null. Por exemplo, a chamada a seguir para a função do Windows CreateFile fornece IntPtr.Zero os valores de pSecurityAttributes argumento e hTemplateFile .

using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;

public class Example
{
   private const uint GENERIC_READ = 0x80000000;
   private const uint OPEN_EXISTING = 3;
   private const uint FILE_ATTRIBUTE_NORMAL = 128;
   private const uint FILE_FLAG_OVERLAPPED = 0x40000000;

   [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
   private static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(
            string lpFileName, System.UInt32 dwDesiredAccess, System.UInt32 dwShareMode,
            IntPtr pSecurityAttributes, System.UInt32 dwCreationDisposition,
            System.UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);

   public static void Main()
   {
      SafeFileHandle hnd = CreateFile("CallOfTheWild.txt", GENERIC_READ, 0,
                                      IntPtr.Zero, OPEN_EXISTING,
                                      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
                                      IntPtr.Zero);
      if (hnd.IsInvalid) {
            Exception ex = Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
            Console.WriteLine("Attempt to open file failed:");
            Console.WriteLine("  {0}", ex.Message);
            return;
      }
      else {
         Console.WriteLine("File successfully opened.");
         hnd.Close();
      }
   }
}
// If the file cannot be found, the example displays the following output:
//    Attempt to open file failed:
//      The system cannot find the file specified. (Exception from HRESULT: 0x80070002)

Nota

Embora seja Zero equivalente a null para funções da API do Windows com parâmetros ou valores retornados que podem ser ponteiros ou null, Zero não é equivalente a null. Passar null para o IntPtr.Zero.Equals método sempre retorna false.

Você também pode testar um null valor retornado de chamadas de função da API do Windows que retornam um ponteiro ou um null comparando o valor retornado com IntPtr.Zero. Por exemplo, a chamada para a GetWindow função no exemplo a seguir tenta recuperar o identificador de uma janela inexistente. Se ela fosse chamada de código não gerenciado, a função retornaria null, mas quando for chamada do código gerenciado, retornará IntPtr.Zero.

using System;
using System.Runtime.InteropServices;

public class Example
{
   private const int GW_OWNER = 4;

   [DllImport("user32", CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true)]
   public static extern IntPtr GetWindow(IntPtr hwnd, int wFlag);

   public static void Main()
   {
      IntPtr hwnd = new IntPtr(3);
      IntPtr hOwner = GetWindow(hwnd, GW_OWNER);
      if (hOwner == IntPtr.Zero)
         Console.WriteLine("Window not found.");
   }
}
// The example displays the following output:
//        Window not found.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0