Esempio n. 1
0
        internal static IMethodSymbol GenerateSetPropertyMethod(CommonCompilation compilation)
        {
            var body = Syntax.ParseStatement(
                @"if (!System.Collections.Generic.EqualityComparer<T>.Default.Equals(field, value))
{
    field = value;

    var handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new System.ComponentModel.PropertyChangedEventArgs(name));
    }
}");

            body = body.WithAdditionalAnnotations(CodeAnnotations.Simplify);

            var stringType = compilation.GetSpecialType(SpecialType.System_String);
            var voidType   = compilation.GetSpecialType(SpecialType.System_Void);

            var typeParameter = SymbolFactory.CreateTypeParameter("T");

            var parameter1 = SymbolFactory.CreateParameter(
                attributes: null,
                refKind: RefKind.Ref,
                isParams: false,
                type: typeParameter,
                name: "field");

            var parameter2 = SymbolFactory.CreateParameter(typeParameter, "value");
            var parameter3 = SymbolFactory.CreateParameter(stringType, "name");

            return(SymbolFactory.CreateMethod(
                       attributes: null,
                       accessibility: CommonAccessibility.Private,
                       modifiers: new SymbolModifiers(),
                       returnType: voidType,
                       explicitInterfaceSymbolOpt: null,
                       name: "SetProperty",
                       typeParameters: new[] { typeParameter },
                       parameters: new[] { parameter1, parameter2, parameter3 },
                       statements: new[] { body }));
        }