16

次のコードがありますが、 var を取得する方法が見つかりませんTypeSyntax。何か案は?

Syntax.LocalDeclarationStatement(                   
    declaration: Syntax.VariableDeclaration(
        type: Syntax.PredefinedType(Syntax.Token(SyntaxKind.VarKeyword)),
        variables: Syntax.SeparatedList(
        Syntax.VariableDeclarator(
            identifier: Syntax.Identifier(name)))
        )
    )
);

これは、「キーワード」という引数例外で失敗します

4

4 に答える 4

28

私は使用します:

Syntax.LocalDeclarationStatement(
    declaration: Syntax.VariableDeclaration(
        type: Syntax.IdentifierName(Syntax.Token(SyntaxKind.VarKeyword)),
        variables: Syntax.SeparatedList(
            Syntax.VariableDeclarator(
                identifier: Syntax.Identifier(name)))));
于 2011-12-06T13:16:55.250 に答える
19

Jb Evain の答えは正しいです。エラーの理由は、「var」が事前定義されたタイプではないためだと付け加えたいと思いました。定義済みの型は、「int」や「string」などです。

構文アナライザーは、スコープ内に「var」という名前のクラスがあるかどうかを認識しません。「var」は定義済みの型としてではなく、別の型の別の名前として扱われます。「var」という名前のスコープ内にタイプが見つからない場合にのみ、セマンティックアナライザーは、ああ、これは暗黙的に型指定されたローカルである必要があると判断します。

これは、C# 3 で「var」が追加されたためで、型の名前として「var」を使用する C# 1 または 2 のプログラムが存在する可能性があるためです。私たちはそれらのプログラムを壊したくありませんでした。

于 2011-12-06T14:53:18.787 に答える
7

あなたの質問に対する正確な答えではありませんが、同じ効果を達成するための別の (そしてより簡単な) 方法は、Syntax.ParseStatement を使用することです。

Syntax.ParseStatement("var " + name);
于 2011-12-10T15:23:07.823 に答える
4

このような質問への回答を簡素化するために、任意の C# プログラムの構文ツリー API 呼び出しを生成できる Quoter というツールを作成しました。

https://roslynquoter.azurewebsites.net

于 2012-07-23T05:40:46.327 に答える