У меня есть пользовательский объект, который отображает логическое значение из старой базы данных в C# bool (и обратно).Обработка сравнений с пользовательским булевым типом?
Мой объект пользовательского BOOL выглядит следующим образом:
public class S2kBool : IUserDefinedType {
public bool Value { get; set; }
public Type SupportedType { get { return typeof(string); } }
// These are the values used to represent booleans in the database
public const string TrueValue = "Y";
public const string FalseValue = "N";
public static S2kBool True {
get { return new S2kBool(true); }
}
public static S2kBool False {
get { return new S2kBool(false); }
}
public S2kBool() : this(false) { }
public S2kBool(bool value) {
this.Value = value;
}
// Called when a property of this type is populated from the database
public void FromSimpleDataType(object value) {
this.Value = value.ToString() == TrueValue;
}
// Called when a property of this type is inserted into the database
public object ToSimpleDataType() {
return this.Value ? TrueValue : FalseValue;
}
}
Я хотел бы быть в состоянии сделать что-то вроде этого:
public class TestObject {
public S2kBool IsActive = S2kBool.True;
}
TestObject tObj = new TestObject();
if (tObj.IsActive == S2kBool.True) {
// the above would evaluate to true
}
Я видел несколько различных способов делать сравнения между объектов, но я не уверен, какой из них использовать.
EDIT: Еще лучше, можно ли сделать что-то вроде следующего и иметь C# рассматривать объект S2kBool в качестве фактического булева во время сравнения? Он также должен позволять сравнивать с другими объектами S2kBool.
if (tObj.IsActive == true) { ... }
Спасибо! Хотя, не могли бы вы объяснить, почему я могу сделать эту неизменяемую структуру? –
Я отредактирую, чтобы проиллюстрировать (слишком длинный комментарий). –