gpt4 book ai didi

c# - 隐藏 C# 'using' 参数的实现

转载 作者:行者123 更新时间:2023-11-30 14:38:47 25 4
gpt4 key购买 nike

我正在尝试将与 native 代码共享的数据的结构(实际上是类,因此它是引用类型)的编码 IntPtr 抽象化。

我有这个辅助类:

class NativeStruct<StructType> : IDisposable
{
public NativeStruct()
{
_DataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(StructType)));
Marshal.PtrToStructure(_DataPtr, _Data);
}
public NativeStruct(IntPtr dataPtr)
{
_DataPtr = dataPtr;
Marshal.PtrToStructure(_DataPtr, _Data);
}

void IDisposable.Dispose()
{
Marshal.StructureToPtr(_Data, _DataPtr, true);
}

public StructType Data { get { return _Data; } }

IntPtr _DataPtr;
public StructType _Data;
}

有没有办法使这段代码隐式化:

using (Shared_s data = new Toolbox.NativeStruct<DataStruct>(myIntPtr).Data)
{
data.someMember = someValue;
}

一些方法可以将其更改为

EditStruct(DataStruct, myIntPtr)
{
data.someMember = someValue;
}

在 C++ 中我会使用像这样的宏

#define EditStruct(StructType, IntPtr) using  \
(Shared_s data = new Toolbox.NativeStruct<StructType>(IntPtr).data)

最佳答案

您在这里可以做的最接近的事情是使用 lambda 表达式:

EditStruct<DataStruct>(myIntPtr, data =>
{
data.someMember = someValue;
});

EditStruct() 的定义:

void EditStruct<TStruct>(IntPtr dataPtr, Action<TStruct> action) 
where TStruct : struct
{
using (var s = new Toolbox.NativeStruct<TStruct>(dataPtr))
{
action(s.Data);
}
}

关于c# - 隐藏 C# 'using' 参数的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com