A partir de 4.0 FW, le IntPtr
structure a la méthode Add
:La nouvelle méthode IntPtr.Add - Ai-je manqué le point de l'int?
public static IntPtr Add(
IntPtr pointer,
int offset
)
Ce qui est génial, car il est censé répondre à toutes ces questions sur les mathématiques IntPtr
nous avons eu (1, 2, probablement plus). Mais pourquoi est le offset
int
?
Est-ce que ce ne doit pas être IntPtr
? Je peux facilement imaginer compenser un pointeur de 64 bits par une valeur qui est au-delà de la plage int
.
Par exemple, considérons Marshal.OffsetOf
:
public static IntPtr OffsetOf(
Type t,
string fieldName
)
Il retourne un IntPtr
que le décalage de l'élément de structure. Ce qui est parfaitement logique! Et vous ne pouvez pas facilement utiliser ce décalage avec la nouvelle méthode Add
. Vous devez le convertir en Int64
, puis appeler le Add
plusieurs fois en boucle.
En outre, il semble tuer l'idée même du IntPtr.Size
étant sans importance pour une application correctement écrite. Vous devrez convertir le décalage en un type particulier, tel que Int64
, auquel cas vous devez commencer à gérer la différence de taille. Et image ce qui se passera lorsque IntPtr
128 bits apparaît.
Ma question est ici, pourquoi?
Est-ce que je suis correct dans mes conclusions, ou est-ce que je manque le point?