2017-10-12 10 views
0
 Dictionary<string, int> test = new Dictionary<string, int>(); 
     test.Add("dave", 12); 
     test.Add("john", 14); 

     int v; 

     test.TryGetValue("dave", out int v) 
     { 

      Console.WriteLine(v); 

     } 

この単純なC#コードでは、「最適なオーバーロードメソッドには無効な引数がいくつかあります」というエラーが表示されます。エラーの原因を教えていただけますか?ありがとう。C#辞書この単純なコードでTryGetValueエラーの原因は何ですか

+0

どのバージョンを使用していますか? VS2017は、構文エラーを修正すると、そのコードがうまくいきません。コンパイラの特定の名前付きバージョンで問題を確実に再現する、完全で有効なサンプルコードを投稿してください。 –

+3

'out int value'はC#7のみです – haim770

+3

' test.TryGetValue'の周りに 'if'文がありませんか? –

答えて

2

OPはC#7を使用していない、VS2012です。

まず、パラメータリストでintを取り除いてください。 C#のあなたのバージョンには存在しません。

第二に、TryGetValue(後にセミコロンを置く)を呼び出し...

int v; 
test.TryGetValue("dave", out v); 
Console.WriteLine(v); 

場合、またはにそれを置く:あなたはコンパイラの

int v; 
if (test.TryGetValue("dave", out v)) 
{ 
    Console.WriteLine(v); 
} 
0

"value"はすでに宣言している変数ですか、それともTryGetValueのインテリセンスの例を残しましたか?後者のケースは間違いないでしょうか。編集:またはそれはC#の機能の新バージョンです...これは、Vのために12を書き出し:

  Dictionary<string, int> test = new Dictionary<string, int>(); 
        test.Add("dave", 12); 
        test.Add("john", 14); 

        int v; 
        test.TryGetValue("dave", out v); 
       { 
          Console.WriteLine(v); 

        } 
+1

他の人が指摘したように、使用しているバージョンでは次のものが使用されています: https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/ –

+1

ここでは、それはRoslynコンパイラで:https://dotnetfiddle.net/eblkGk –

+0

私はドットネットフィドルがあることを知らなかった。ありがとう! –

0

あなたがコードの必要はありませんタイプミスや

TryGetValue() 

の誤解のいずれかを持ってあなたのwritelineが座っているブロック。 あなたのコード行を終了し、あなたのwriteLineを実行してください。

test.TryGetValue("dave", out int value); // <---- notice the ; 
Console.WriteLine(value); 

EDIT: または、Mr.Nimeloが示唆するように、そのように欠落しているif文があるかもしれません:

if test.TryGetValue("dave", out int value) 
{ 
    Console.WriteLine(value); 
} 
0

は、あなたがいや、あなたのスニペットでifをお見逃しなく!リファクタリングのビットと

Dictionary<string, int> test = new Dictionary<string, int>(); 
    test.Add("dave", 12); 
    test.Add("john", 14); 

    // missing if there? 
    test.TryGetValue("dave", out int value) 
    { 

     Console.WriteLine(value); 

    } 

マイ安いの2セント...:

var test = new Dictionary<string, int> {{"dave", 12}, {"john", 14}}; 

    if (test.TryGetValue("dave", out var value)) 
    { 
     Console.WriteLine(value); 
    } 

    Console.ReadKey(); 
関連する問題