private static ExpressionSyntax Compare(IFieldSymbol field) { if (field.Type.SpecialType == SpecialType.System_Boolean || field.Type.SpecialType == SpecialType.System_Char || field.Type.SpecialType == SpecialType.System_SByte || field.Type.SpecialType == SpecialType.System_Byte || field.Type.SpecialType == SpecialType.System_Int16 || field.Type.SpecialType == SpecialType.System_UInt16 || field.Type.SpecialType == SpecialType.System_Int32 || field.Type.SpecialType == SpecialType.System_UInt32 || field.Type.SpecialType == SpecialType.System_Int64 || field.Type.SpecialType == SpecialType.System_UInt64 || field.Type.SpecialType == SpecialType.System_Single || field.Type.SpecialType == SpecialType.System_Double) { return(BinaryExpression(SyntaxKind.EqualsExpression, field.AsIdentifierName(), "value".AsIdentifierName())); } return(InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, PredefinedType( Token(SyntaxKind.ObjectKeyword)), IdentifierName("Equals"))) .WithArgumentList(RoslynHelpers.CreateArguments(field.AsIdentifierName(), "value".AsIdentifierName()))); }