我喜欢类型。希望能够为字符串或int等指定含义)
字符串或整数几乎可以是任何东西,
我喜欢给字符串一个有意义的类型。当您需要冗长的函数调用时,我也希望这样做。这样的人使用它不会以错误的顺序传递字符串。
我经常使用字符串作为参数,并且我希望“ MembersName”作为从字符串派生的类型。
我可以轻松地执行类似于MemberName.Value的操作,其中string是另一个类的属性。我宁愿从String派生我的课程,但由于它是密封的,所以这是不可能的。
我查看了System.String源,并考虑将其取出来使用它来创建自己的String类型,但我决定反对它。
然后,我开始在基类中创建我自己的立场,我可以从StringBase(确实很好的名称)派生其他类似字符串的类型。
我正在努力实施IEquatable,ICloneable,IComparable,IComparable,IConvertible,IEquatable,IEnumerable
在基本类型中,使其尽可能像字符串一样显示。
我希望能够使用Membername ==“ Phil Collins”。
还希望模仿String的其他功能。
这是正确的路径吗?有人写过它的版本吗?我认为必须先要有其他人提出?到目前为止,我尝试过搜索Google和GitHub并没有多大运气。
我要沿着正确的道路走吗?还是我试图做的事几乎不可能?
我认为这可能是一个很好的设计,因为它为不同类型的字符串提供类型安全性(可以更好地支持重载方法,重构等。
我从一个旧项目中挖了一些东西,至少可以使您入门。
在这种情况下,我有一个强类型的UserId
(几乎)用作字符串。
也许如果您使用隐式运算符作为'GuruStron'来完成此操作,则您将需要做一些工作,尽管如果我没记错的话,我选择不提供隐式运算符,因为它会使类型“较少类型安全”。
public struct UserId : IStringIdentifier, IEquatable<UserId>
{
public UserId(string id) : this() => Value = id;
public string Value { get; set; }
public static bool operator ==(UserId id1, UserId id2)
=> id1.Value == id2.Value;
public static bool operator !=(UserId id1, UserId id2)
=> id1.Value != id2.Value;
public override bool Equals(object obj)
{
if (obj is UserId other)
return Equals(other);
return false;
}
public bool Equals(UserId other) => Value.Equals(other.Value);
public override string ToString() => Value;
public override int GetHashCode() => Value.GetHashCode();
}
编辑:稍微整理一下。