问题描述
ServerInfo = CType(System.Runtime.InteropServices.Marshal.PtrToStructure(BufferPtr,GetType(SERVER_INFO_100)),SERVER_INFO_100)
我需要将此 CType
转换为 C#。我不知道 VB.net。请建议如何执行此操作以及forloop
For index = 0 To iEntriesRead - 1
解决方法
CType
是一个强制转换运算符/函数,因此与 C# 中的 (SERVER_INFO_100) object
相当。
ServerInfo = (SERVER_INFO_100) System.Runtime.InteropServices.Marshal.PtrToStructure(BufferPtr,GetType(SERVER_INFO_100));
最接近 C# 转换运算符的是 VB.NET 中的 DirectCast
。读:
Difference between DirectCast() and CType() in VB.NET
在 C# 中,您还可以使用与 VB.NET TryCast
相同的 as
转换运算符。
ServerInfo = System.Runtime.InteropServices.Marshal.PtrToStructure(BufferPtr,GetType(SERVER_INFO_100)) as SERVER_INFO_100;
这样做的好处是,如果类型不是 SERVER_INFO_100
,您不会收到异常。
请建议如何执行此操作以及 forloop
文档中对 for-loop 进行了说明。
,您可以在 C# 中使用“as”进行转换
例如:
ServerInfo = Marshal.PtrToStructure(BufferPtr,typeof(SERVER_INFO_100)) as SERVER_INFO_100;
对于 C# 中的 For 循环,您可以遵循以下代码
for(int index=0;index< iEntriesRead - 1;index++)
{
//your code
}