предопределенные параметры в функции - PullRequest
4 голосов
/ 31 января 2012

я искал, но не очень, я хочу создать функцию, которая позволяет только определенным элементам передаваться в качестве первого параметра.

например. он должен разрешать только следующие строки:

"error", "warning", "info"

тогда вызов будет

showme("error");
or showme("warning");
or showme("info");

это можно сделать? Я знаю, что могу определить

showme(string type){}

но в идеале мне нужно showme(string type "error"){}

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Я предлагаю enum

public enum ErrorType {
    error,
    warning,
    info
}

public void ShowMe(ErrorType errorType) {
    switch (errorType) {
        case ErrorType.error:
        //do stuff
        break;
        case ErrorType.warning:
        //do stuff
        break;
        case ErrorType.info:
        //do stuff
        break;
        default:
        throw new ArgumentException("Invalid argument supplied");
        break;
    }
}

//Invoke the method
ShowMe(ErrorType.info);
3 голосов
/ 31 января 2012

Согласно комментарию Розуура, Enum будет чистым вариантом.В противном случае вы можете попытаться использовать кодовые контракты: http://www.cauldwell.net/patrick/blog/CodeContracts.aspx

0 голосов
/ 31 января 2012

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

Что-то вроде:

public class StringConstraint
{
   private StringConstraint()
   public static readonly StringConstraint error = new StringConstraint()
   ...

   public void DoStuffWithStringValue()
   {
      // Here you do the logic that depends on your particular string value
      // e.g. (always) log a message as an error
   }
}

Это обязывает вас только когда-либо передавать экземпляры, которые соответствуют логике, которую вы хотите реализовать для каждой из ваших трех строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...