IntPtr.Subtraction(IntPtr, Int32) Operator
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
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)