Esempio n. 1
0
        private static MethodDeclaration BuildObjectEqualsMethod(RecordDeclaration record)
        {
            var statements = new IWriteableCode[] {
                new Statement($"return this.Equals(other as {record.Name});")
            };

            return(new MethodDeclaration(
                       "Equals",
                       "bool",
                       Visibility.Public,
                       isStatic: false,
                       isOverride: true,
                       parameters: new [] { new Parameter("other", "object") },
                       contents: statements));
        }
Esempio n. 2
0
        private static MethodDeclaration BuildEqualsMethod(RecordDeclaration record)
        {
            var propComparisons = record.RecordProperties.Select(p =>
                                                                 $"{Environment.NewLine}&& Equals({p.Name}, other.{p.Name}) ");

            var statements = new IWriteableCode[] {
                new Statement($"return !(other is null) {String.Join("", propComparisons)};")
            };

            return(new MethodDeclaration(
                       "Equals",
                       "bool",
                       Visibility.Public,
                       isStatic: false,
                       isOverride: false,
                       parameters: new [] { new Parameter("other", record.Name) },
                       contents: statements));
        }
Esempio n. 3
0
        private static MethodDeclaration BuildToStringMethod(RecordDeclaration record)
        {
            var propNames = String.Join($",{Environment.NewLine}", record.RecordProperties.Select(p => $"$\"{p.Name} = {{{p.Name}}}\""));

            var statements = new IWriteableCode[] {
                new Statement($"var elements = new string[] {{"),
                new Statement($"var elements = new string[] {{ {propNames} }};"),
                new Statement($"}};"),
                new Statement($"var s = System.String.Join(\", \", elements);"),
                new Statement($"return $\"{record.Name} {{{{ {{s}} }}}}\";")
            };

            return(new MethodDeclaration(
                       "ToString",
                       "string",
                       Visibility.Public,
                       isStatic: false,
                       isOverride: true,
                       parameters: new Parameter[] { },
                       contents: statements));
        }