[英]Interop: struct member name conflict with c# keyword - event
我正在使用訪問控制設備(終端)。 API是本機的。 要將數據發送到設備,我實例化struct(由API提供),使用[Marshal.StructureToPtr]將其更改為IntPtr,然后將該指針傳遞給API函數。 這是我正在使用的結構。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct NameOfTheStruct
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
ushort[] event;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
ushort[] someName;
};
問題在於給定結構中的成員名稱與[event]關鍵字重疊。 如果我更改成員名稱,我猜想對本機api的函數調用將失敗。
這會:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
[ComAliasName("event")]
ushort[] eventName;
解決我的問題? 還是有其他解決方案?
您可以使用@
將關鍵字用作標識符:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
ushort[] @event;
從C#中,您將如下訪問此字段:
yourInstance.@event
雖然@
實際上不會成為標識符的一部分。
您可以在C#規范的“ 2.4.2標識符”下查找它:
前綴“ @”允許將關鍵字用作標識符,這在與其他編程語言進行接口時非常有用。 字符@實際上不是標識符的一部分,因此在其他語言中,標識符可能被視為普通標識符,沒有前綴。 具有@前綴的標識符稱為逐字標識符。 允許將@前綴用於不是關鍵字的標識符,但是強烈建議您不要使用樣式。
嘗試在其前面加上@:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
ushort[] @event;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.