Вызов ошибки компиляции при невыполнении определённого условия в коде

Дано

Есть метод, который возвращает объект структуры 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;
    }
}

Ответы (0 шт):