Целые числа со строгим контролем типов

Как мысленный эксперимент на проекте хобби, я думал о способе гарантировать, что этого вида тонкой ошибки/опечатки не происходит:

public void MyMethod(int useCaseId)
{
    // Do something with the useCaseId
}

public void SomeOtherMethod()
{
    int userId = 12;
    int useCaseId = 15;
    MyMethod(userId); // Ooops! Used the wrong value!
}

Эту ошибку было бы трудно найти, потому что нет никакой ошибки времени компиляции, и Вы не обязательно даже получили бы исключение во времени выполнения. Вы просто получили бы "неожиданные результаты".

Для разрешения этого простым способом я экспериментировал с использованием пустых перечислимых определений. Эффективно делая идентификатор пользователя типом данных (не идя вполне до класса или структуры):

public enum UseCaseId { // Empty… }

public enum UserId { // Empty… }

public void MyMethod(UseCaseId useCaseId)
{
   // Do something with the useCaseId
}

public void SomeOtherMethod()
{
   UserId userId = (UserId)12;
   UseCaseId useCaseId = (UseCaseId)15;
   MyMethod(userId); // Compile error!!
}

Что Вы думаете?

5
задан Neil Barnwell 10 August 2010 в 11:54
поделиться