相当于 C# 的 VB Ctype

问题描述

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
}