相关疑难解决方法(0)

C#中对象的内存地址

我有一段时间写的功能(对于.NET 3.5),现在我已升级到4.0

我无法让它发挥作用.

功能是:

public static class MemoryAddress
{
    public static string Get(object a)
    {
        GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);
        IntPtr pointer = GCHandle.ToIntPtr(handle);
        handle.Free();
        return "0x" + pointer.ToString("X");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我调用它时 - MemoryAddress.Get(新车("蓝色"))

public class Car
{
    public string Color;
    public Car(string color)
    {
        Color = color;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

对象包含非原始或非blittable数据.

为什么它不再起作用了?

我现在如何获取托管对象的内存地址?

.net c#

66
推荐指数
6
解决办法
8万
查看次数

泛型指针?

好吧所以我想创建一个将改变数据类型值的泛型类.我想这样做的原因是我可以使用撤消和重做方法.我可以为我需要的每种值类型编写一个类.IE double,int ...但如果我可以创建一个通用类来做这件事会容易得多.

这就是我所拥有的

class CommandChangeDouble : Command
{
    double _previous;
    double _new;
    double* _objectRef;

    public unsafe CommandChangeDouble(double* o, double to)
    {
        _objectRef = o;
        _previous = *o;
        _new = to;
        *_objectRef = _new;
    }

    public unsafe void Undo()
    {
        *_objectRef = _previous;
    }
    public unsafe void Redo()
    {
        *_objectRef = _new;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我要的

class CommandChangeValue<T> : Command
{
    T _previous;
    T _new;
    T* _objectRef;

    public unsafe CommandChangeValue(T* o, T to)
    {
        _objectRef = o;
        _previous = *o;
        _new …
Run Code Online (Sandbox Code Playgroud)

c# generics pointers value-type

8
推荐指数
3
解决办法
4762
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

pointers ×1

value-type ×1