using System; namespace Cryville.Common { public struct Identifier : IEquatable { public int Key { get; private set; } public object Name { get { return IdentifierManager.SharedInstance.Retrieve(Key); } } public Identifier(int key) { Key = key; } public Identifier(object name) { Key = IdentifierManager.SharedInstance.Request(name); } public override bool Equals(object obj) { if (obj == null || !(obj is Identifier)) return false; return Equals((Identifier)obj); } public bool Equals(Identifier other) { return Key == other.Key; } public override int GetHashCode() { return Key; } public override string ToString() { if (Key == 0) return ""; return Name.ToString(); } public static implicit operator Identifier(string identifier) { return new Identifier(identifier); } public static implicit operator string(Identifier identifier) { return identifier.ToString(); } } }