【问题标题】:Error when converting VB.Net to C#将 VB.Net 转换为 C# 时出错
【发布时间】:2014-09-30 05:11:47
【问题描述】:

我有这个 VB.Net 函数(来自其他项目),我需要将其转换为 C#

Private Function Convert(ByVal Value As String) As String
    Dim transformed = Encoding.Unicode.GetBytes(Value).Select( _
        Function(item) Not item)
    Return Encoding.Unicode.GetString(transformed.ToArray())
End Function

这是我尝试过的:

private string Convert(string Value)
{
    return Encoding.Unicode.GetString(Enumerable.ToArray<byte>(Enumerable.Select<byte, byte>((IEnumerable<byte>)Encoding.Unicode.GetBytes(Value), 
               (Func<byte, byte>)(item => ~item))));
}

我收到两个错误:

  • 无法将类型“int”隐式转换为“byte”。存在显式转换(您是否缺少演员表?)
  • 无法将 lambda 表达式转换为委托类型“System.Func”,因为块中的某些返回类型不能隐式转换为委托返回类型

谁能帮我解决这个问题?

【问题讨论】:

    标签: c# encoding


    【解决方案1】:

    试试下面的代码。

    我不确定为什么 LINQ Select 将字节数组转换为 int 数组,因此需要显式转换。

    private string Convert(string value)
    {
        var invertedBytes = Encoding.Unicode.GetBytes(value).Select(b => (byte)~b).ToArray();
        return Encoding.Unicode.GetString(invertedBytes);
    }
    

    【讨论】:

      【解决方案2】:

      你可以试试这个 C# 代码。

      private string Convert(string Value)
      {
          dynamic transformed = Encoding.Unicode.GetBytes(Value).Select(item => (byte)~item);
          return Encoding.Unicode.GetString(transformed.ToArray());
      }
      

      我已经用这个工具转换了-http://converter.telerik.com/

      【讨论】:

      • OP 在 VB.NET 中执行按位非运算,~item 在 C# 中是等价的。您的代码无法编译。请验证。
      • @ChannappaJagadish ,是的,你是对的,所以我更新了我的代码,让它编译,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多