<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> <Title>ValueObject</Title> <Author>[USERNAME]</Author> <Description> </Description> <HelpUrl> </HelpUrl> <Shortcut>valueo</Shortcut> </Header> <Snippet> <Declarations> <Literal Editable="true"> <ID>ValueTypeName</ID> <ToolTip>ValueTypeName</ToolTip> <Default>ValueTypeName</Default> <Function> </Function> </Literal> <Literal Editable="true"> <ID>PropertyType</ID> <ToolTip>PropertyType</ToolTip> <Default>string</Default> <Function> </Function> </Literal> <Literal Editable="true"> <ID>PropertyName</ID> <ToolTip>PropertyName</ToolTip> <Default>Value</Default> <Function> </Function> </Literal> </Declarations> <Code Language="csharp" Delimiter="$"><![CDATA[public class $ValueTypeName$ : IEquatable<$ValueTypeName$> { public $ValueTypeName$($PropertyType$ $PropertyName$) { this.$PropertyName$ = $PropertyName$; } public $PropertyType$ $PropertyName$ { get; } public override int GetHashCode() { return this.$PropertyName$?.GetHashCode() ?? 0; } public override bool Equals(object obj) { return this.Equals(obj as $ValueTypeName$); } public bool Equals($ValueTypeName$ obj) { if (ReferenceEquals(obj, null)) { return false; } return obj.Value == this.Value; } public static bool operator ==($ValueTypeName$ a, $ValueTypeName$ b) { if (ReferenceEquals(a, null) && ReferenceEquals(b, null)) { return true; } if (ReferenceEquals(a, null) || ReferenceEquals(b, null)) { return false; } return a.Equals(b); } public static bool operator !=($ValueTypeName$ a, $ValueTypeName$ b) { return !(a == b); } }]]></Code> </Snippet> </CodeSnippet> </CodeSnippets>