Вызов ошибки компиляции при невыполнении определённого условия в коде
Дано
Есть метод, который возвращает объект структуры Result, у которой есть поля Type (может быть равен Allowed или Disallowed) и AllowedField.
В моей задаче AllowedField не может иметь значение, если у поля Type значение Disallowed
public struct Result
{
public enum Types { Allowed, Disallowed };
public Types Type;
private string allowedField;
}
public Result GetResult(int inputValue)
{
Result outputObject;
if (inputValue != 0)
{
outputObject.Type = Result.Types.Allowed;
outputObject.allowedField = "12345678";
return outputObject;
}
else
{
outputObject.Type = Result.Types.Disallowed;
// возможно ли здесь вызывать ошибку компиляции?
// Я не хочу случайно записать в поле allowedField какое-то значение, если у меня Type = Disallowed
outputObject.allowedField = "12345678";
return outputObject;
}
}
Хотелось бы
чтобы вызывалась ошибка подсвечивалась в IDE, если я записываю данные в переменную, когда Type не предполагает этого.
Частичное решение
Можно вызывать exception, обернув поля в методы геттеры и сеттеры. Но в IDE во время просмотра кода это как ошибка не подсвечивается
public class WrongTypeException: Exception
{
public WrongTypeException() { }
}
public struct Result
{
Exception ResultObjectWrongType;
public enum Types { Allowed, Disallowed };
public Types Type;
private string allowedField;
public void SetAllowedField(string value)
{
if (this.Type == Types.Allowed)
{
this.allowedField = value;
}
else
{
throw new WrongTypeException();
}
}
public string GetAllowedField()
{
if (this.Type == Types.Allowed)
{
return this.allowedField;
}
else
{
throw new WrongTypeException();
}
}
}
public Result GetResult(int inputValue)
{
Result outputObject = new Result();
if (inputValue != 0)
{
outputObject.Type = Result.Types.Allowed;
outputObject.setAllowedField("asd");
return outputObject;
}
else
{
outputObject.Type = Result.Types.Disallowed;
// непозволительно
outputObject.setAllowedField("asd");
return outputObject;
}
}