簡體   English   中英

互操作:結構成員名稱與C#關鍵字發生沖突-事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM