我最近在JVM/Groovy领域上几年后回到了.NET世界。类型安全的枚举模式在C#版本6+中仍然可行
我在C#中最喜欢的日常模式之一曾经是Type-Safe enum pattern,我发现非常方便。回到C#我立即开始使用它,但现在我怀疑可能有更好的或者更可取的模式。
让我想到的是我想在“枚举”中引入一些行为。就像这样:
public sealed class TypeSafeEnumWithBehaviour
{
public static readonly TypeSafeEnumWithBehaviour IsLowerCase = new TypeSafeEnumWithBehaviour("IsLowerCase", s => s.All(c => Char.IsLower(c)));
public static readonly TypeSafeEnumWithBehaviour IsUpperCase = new TypeSafeEnumWithBehaviour("IsUpperCase", s => s.All(c => Char.IsUpper(c)));
public readonly string Name;
public readonly Func<string, bool> IsValid;
private TypeSafeEnumWithBehaviour(string targetName, Func<string, bool> validation)
{
Name = targetName;
IsValid = validation;
}
}
测试:
[TestMethod]
public void TestMethod1()
{
Assert.IsTrue(TypeSafeEnumWithBehaviour.IsLowerCase.IsValid("apa"));
Assert.IsTrue(TypeSafeEnumWithBehaviour.IsUpperCase.IsValid("PAPA"));
}
我organizatoin目前正在使用C#6,而C#7正在成为害得我几个问题更为普遍。
- 什么是类型安全枚举模式的当前视图?
- 它仍然是一个有效的模式,特别是关于 序列化/持久性?
- 我应该放弃它来支持别的吗?
链接是也许不是最权威的,但我认为这说明了模式以及 – Fontanka16
从我透视图,如果你想把枚举引入下一层,最好把它们建模为值对象或枚举类。我知道它在第一眼看起来很奇怪,但至少你可以看一下:https://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/ –
我以前使用过这种模式,但是我不要真的把它们视为“枚举”。在即将到来的语言版本中,我没有看到任何提供这种功能的东西,所以它似乎仍然是一种有效的模式。 –