2014-09-30 118 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