2014-09-30 96 views
0

我有这个VB.Net函数(来自其他项目),我需要将它转换为C#将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)))); 
} 

我得到两个错误:

  • 无法隐式转换类型 '诠释' 到 '字节'。一个显式转换存在(是否缺少强制转换?)
  • 无法转换lambda表达式的委托类型“System.Func”,因为一些块的返回类型不隐式转换为委托返回类型

任何人都可以帮助我吗?

回答

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); 
} 
1

你可以试试这个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/

+1

OP在VB.NET中执行按位不操作,“〜item”在C#中是等效的。你的代码不会编译。请确认。 – Channs 2014-09-30 05:47:32

+0

@ChannappaJagadish,是的,你是对的,所以我已经更新了我的代码,使其编译,谢谢! – 2014-09-30 06:10:09