【问题标题】:C# to VB.NET conversion of list sortC# 到 VB.NET 的列表排序转换
【发布时间】:2019-12-30 18:15:11
【问题描述】:

对于 C# 人来说简单的问题,VB.NET 语法相当于:

wlanBssEntries.Sort(delegate ( Wlan.WlanBssEntry a, Wlan.WlanBssEntry b ) {
                            return sortModifier * string.Compare(ASCIIEncoding.ASCII.GetString(a.dot11Ssid.SSID),
                                ASCIIEncoding.ASCII.GetString(b.dot11Ssid.SSID), StringComparison.InvariantCultureIgnoreCase);
                        });

非常感谢。

【问题讨论】:

  • 旁白:SSID 是 UTF-8, not always ASCIIthe docs for the DOT11_SSID structure 说明 SSID 不是 以 null 结尾的 ASCII 字符串 - 因此您不应将其视为一个。相反,请使用 Encoding.UTF8.GetString(a.dot11Ssid.SSID, 0, (int) a.dot11Ssid.SSIDLength),如 here 所示。
  • @Matt: 我的结构被定义为 Public Structure Dot11Ssid Public SSIDLength As UInteger Public SSID As Byte() End Structure
  • 如果您搜索 C# to VB.NET,您可以找到代码转换器。这似乎适用于您的情况codeconverter.icsharpcode.net。我建议查看stackoverflow.com/help/how-to-ask
  • @Jerry - 没错。您需要使用 SSIDLength 属性。不要只是忽略它。

标签: c# vb.net


【解决方案1】:

工作语法是:

wlanBssEntries.Sort(Function(a As wlan.WlanBssEntry, b As wlan.WlanBssEntry) sortModifier * String.Compare(ASCIIEncoding.ASCII.GetString(a.dot11Ssid.SSID), ASCIIEncoding.ASCII.GetString(b.dot11Ssid.SSID), StringComparison.InvariantCultureIgnoreCase))

【讨论】:

  • 按照建议,使用Encoding.UTF8.GetString()。如果 SSID 是 ASCII 编码的,UTF8 将按原样读取它,因为它以 1:1 映射 ASCII 表(每个字符一个字节)。如果是 UTF8 编码,Encoding.ASCII.GetString() 会返回垃圾。
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多