IntPtr.Subtraction(IntPtr, Int32) Operator

Definition

Subtraherar en förskjutning från ett signerat heltal.

public:
 static IntPtr operator -(IntPtr pointer, int offset);
public static IntPtr operator -(IntPtr pointer, int offset);
static member ( - ) : nativeint * int -> nativeint
Public Shared Operator - (pointer As IntPtr, offset As Integer) As IntPtr

Parametrar

pointer
IntPtr

nativeint

Det signerade heltal som förskjutningen ska subtraheras från.

offset
Int32

Förskjutningen för att subtrahera.

Returer

IntPtr

nativeint

Ett nytt signerat heltal som återspeglar subtraktionen av offset från pointer.

Kommentarer

Metoden Subtraction definierar subtraktionsåtgärden för IntPtr objekt. Den aktiverar kod, till exempel följande.

int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
unsafe {
   fixed(int* parr = &arr[arr.GetUpperBound(0)])
   {
      IntPtr ptr = new IntPtr(parr);
      for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
      {
         IntPtr newPtr = ptr - ctr * sizeof(Int32);
         Console.Write("{0}   ", Marshal.ReadInt32(newPtr));
      }
   }
}
// The example displays the following output:
//       20   18   16   14   12   10   8   6   4   2
#nowarn "9"
open System.Runtime.InteropServices
open FSharp.NativeInterop

[<EntryPoint>]
let main _ =
    let arr =
        [| 2; 4; 6; 8; 10; 12; 14; 16; 18; 20 |]

    use parr = fixed &arr[arr.GetUpperBound 0]
    
    let ptr = NativePtr.toNativeInt parr

    for i = 0 to arr.GetUpperBound 0 do
        let newPtr = ptr - nativeint i * nativeint sizeof<int>
        printf $"{Marshal.ReadInt32 newPtr}   "
    0

    // The example displays the following output:
    //       20   18   16   14   12   10   8   6   4   2
Dim arr() As Integer = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }
Dim ptr As IntPtr = Marshal.UnsafeAddrOfPinnedArrayElement(arr, arr.GetUpperBound(0))
For ctr As Integer= 0 To arr.GetUpperBound(0)
   Dim newPtr As IntPtr = ptr - ctr * Len(arr(0))
   Console.Write("{0}   ", Marshal.ReadInt32(newPtr))
Next

Språk som inte stöder anpassade operatorer kan anropa Subtract metoden i stället.

Subtraktionsåtgärden utlöser inget undantag om resultatet är för litet för att representeras som ett signerat heltal i körningsprocessen. I stället utförs den i en omarkerad kontext.

I C# från version 11 och när du riktar in dig på .NET 7 eller senare körning är det här API:et endast tillgängligt via reflektion. Subtraktionsoperatorn identifieras direkt av språket och följer det normala språkbeteendet för subtraktionsåtgärder, inklusive spill i en checked kontext om resultatet är för litet för att representera.

Motsvarande metod för den här operatorn är IntPtr.Subtract(IntPtr, Int32)

Gäller för

Se även