in src/Json.Schema.ToDotNet/ClassGenerator.cs [1014:1061]
private StatementSyntax GenerateDictionaryInitializationWithClonedElements(
string propertyName,
TypeSyntax elementType)
{
string argName = propertyName.ToCamelCase();
string valueVariableName = _localVariableNameGenerator.GetNextCollectionElementVariableName();
TypeSyntax dictionaryType = PropInfoDictionary.GetConcreteDictionaryType(propertyName);
return SyntaxFactory.IfStatement(
// if (foo != null)
SyntaxHelper.IsNotNull(argName),
SyntaxFactory.Block(
SyntaxFactory.ExpressionStatement(
// Foo = new Dictionary<string, D>();
SyntaxFactory.AssignmentExpression(
SyntaxKind.SimpleAssignmentExpression,
SyntaxFactory.IdentifierName(propertyName),
SyntaxFactory.ObjectCreationExpression(
dictionaryType,
SyntaxFactory.ArgumentList(),
default(InitializerExpressionSyntax)))),
// foreach (var value_0 in foo)
SyntaxFactory.ForEachStatement(
SyntaxHelper.Var(),
valueVariableName,
SyntaxFactory.IdentifierName(argName),
SyntaxFactory.Block(
SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(propertyName),
SyntaxFactory.IdentifierName(AddMethodName)),
SyntaxHelper.ArgumentList(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(valueVariableName),
SyntaxFactory.IdentifierName(KeyPropertyName)),
SyntaxFactory.ObjectCreationExpression(
elementType,
SyntaxHelper.ArgumentList(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(valueVariableName),
SyntaxFactory.IdentifierName(ValuePropertyName))),
default(InitializerExpressionSyntax)))))))));
}