Вы можете проверить nVenttive Umbrella :
using System;
using nVentive.Umbrella.Validation;
using nVentive.Umbrella.Extensions;
namespace Namespace
{
public static class StringValidationExtensionPoint
{
public static string Contains(this ValidationExtensionPoint<string> vep, string value)
{
if (vep.ExtendedValue.IndexOf(value, StringComparison.InvariantCultureIgnoreCase) == -1)
throw new ArgumentException(String.Format("Must contain '{0}'.", value));
return vep.ExtendedValue;
}
}
class Class
{
private string _foo;
public string Foo
{
set
{
_foo = value.Validation()
.NotNull("Foo")
.Validation()
.Contains("bar");
}
}
}
}
Хотелось бы, чтобы расширения Validation были компоновщиками, чтобы вы могли делать _foo = value.Validation().NotNull("Foo").Contains("bar").Value;
, но это то, чем оно является (к счастью, его открытый исходный код, поэтому сделать его компоновщиком - тривиальное изменение).
И в качестве альтернативного решения вы можете рассмотреть проверку домена .
Наконец, новые языки M , в составе Oslo поддерживают ограничения на их экстенты и поля, которые переводят как в проверку T-SQL, так и в класс CLR с функционирующими проверочными тестами ( хотя до освобождения Осло еще много времени).