2

コンストラクターの名前付き引数を作成するときに、使用可能なコンストラクターだけが。を要求するという問題が発生していますrefOrOutKeyword SyntaxToken。合格nullは許可されておらず、さらにSyntax.ParseToken("")失敗します。Syntax.Token(SyntaxKind.RefKeyword)および:Syntax.Token(SyntaxKind.OutKeyword)のいずれrefかを挿入するため、どちらも不適切です。out

var ctorArgs = Syntax.ArgumentList();
var ctor = enclosingType.Members
                        .OfType<ConstructorDeclarationSyntax>()
                        .OrderBy(cc => cc.ParameterList.Parameters.Count)
                        .FirstOrDefault();
if (ctor != null)
{
    //
    // Summary:
    //     Creates a new ArgumentSyntax instance.
    // public static ArgumentSyntax Argument(
    //     NameColonSyntax nameColon,
    //     SyntaxToken refOrOutKeyword,
    // ExpressionSyntax expression);
    ctorArgs.AddArguments((
        from param in ctor.ParameterList.Parameters
        select Syntax.Argument(
                Syntax.NameColon(param.Identifier.ValueText),
                Syntax.ParseToken("") /* <- what to put here */, 
                Syntax.DefaultExpression(param.Type))
    ).ToArray());
}

名前付き引数を作成する方法を説明するための適切なドキュメントも見つかりませんでした。

4

3 に答える 3

3

答えはずっと私の目の前にありました。「null」または空にしたい場合は、次SyntaxTokenを使用してdefaultください。

Syntax.Argument(
    Syntax.NameColon(param.Identifier.ValueText),
    default(SyntaxToken),
    Syntax.DefaultExpression(param.Type))
// Produces output like:
//    baseUri: default(string)
于 2012-10-05T17:15:00.293 に答える
3

通常、実行時にそのようなコードがどのように表されるかを調べると役立ちます。名前付き引数を使用するコードを解析し、問題のを見ると、それはRefOrOutKeyword.Kindです。したがって、同じことを行う必要があります。withをその:として作成します。ArgumentSyntaxNoneSyntaxTokenNoneKind

Syntax.Token(SyntaxKind.None)
于 2012-10-05T17:20:34.113 に答える
2

2つのステップでそれを行うこともできます:

Syntax.Argument(Syntax.DefaultExpression(param.Type))
      .WithNameColon(Syntax.NameColor(param.Identifier.ValueText))
于 2012-10-05T21:56:16.540 に答える