2016-10-23 1 views
0

私がしようとすると、エラーで次のメソッドの結果をコンパイルすると、「BC30491式が値を生成しませんが、」:SecureStringのこのVB.NET拡張メソッドで何が問題になっていますか?

<Extension()> 
Public Sub FromClearString(ByRef secureString As SecureString, clearString As String) 

    clearString.ToList().ForEach(Function(c) secureString.AppendChar(c)) 
    secureString.MakeReadOnly() 

End Sub 

それは私には完全に通常の延長のように思えるが、私は動作しませんVBは非常に頻繁に。何が間違っているのでしょうか?

+1

私はので、それはあると思います'AppendChar()'はvoidで、 'Function(c)'からは何も返しません。 – Crowcoder

+3

'Function(c)'の代わりに 'Sub(c)'を使用 – Slai

+2

あなたは 'ByRef'についての長い誤解の犠牲になっています。 'ByRef'はC#の' ref'と同じです。この場合、あなたはそれを必要とせず、できるだけそれを持ってはいけません。 C#では、C#はExtensionAttributeを拡張メソッドと呼ばれるメソッドには適用しないため、コンパイルされません。明らかに、VBはもっと自由です。拡張メソッド構文は、変数またはフィールドに限らず、左側に式を持つことを意図しています。 –

答えて

1
clearString.ToList().ForEach('---> Function(c) '<--- secureString.AppendChar(c)) 

ForEachこのコードを使用してみてください:

clearString.ToList().ForEach(Sub(c) secureString.AppendChar(c)) 
+0

私はそれを逃した方法を知っています。私は他のすべての、十分な、サブ 'lambdasを正しく行ったが、私はベッドの前に数時間、疲れて、時間のC#をVB.NETに翻訳しようとしていた。ありがとう。 – ProfK

+0

@ProfK C#をVBに変換するツールがたくさんあります。https://www.google.com/search?q=C%23+to+VB – Slai

+0

@ProfK –

0

SecureString.AppendChar()メソッドは値を生成しません。

署名がAction(Of T)で、.AppendChar(c)

正しい方法なものを返さない

For Each chr as char in clearString 
SecureString.AppedChar(chr) 
Next 
+0

LINQの何が問題ですか?そして、ところで、文字列は暗黙的ですが、不変のchar配列です。したがって、ToCharArray()は不要です。 – ProfK

+1

私はToCHarArray()チップを削除しました – Hadi

関連する問題