Необязательный параметр в c # - PullRequest
4 голосов
/ 17 ноября 2010

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

public void getno(int pvalu, string pname = "")
{

}

Ответы [ 5 ]

25 голосов
/ 17 ноября 2010

Похоже, в некоторых ответах есть некоторая дезинформация:

  • Дополнительные параметры были введены в C # 4, поэтому вы должны использовать компилятор C # 4
  • Необязательные параметры всегда были в framework , поэтому вы можете указать любую версию фреймворка и по-прежнему использовать их, если вы используете компилятор C # 4. Вполне разумно ориентироваться на .NET 2 с помощью компилятора C # 4, и тогда кто-то, ссылающийся на вашу библиотеку, скажем, из VB8, все равно сможет использовать ваши необязательные параметры.

Как уже говорили другие, перегрузки являются альтернативой использованию необязательных параметров, если вы не используете C # 4 или если вы хотите, чтобы ваш код потреблялся из-за более раннего кода C #. (Если вы создаете библиотеку с использованием C # 4, но затем в нее должен вызываться некоторый код C # 3, эти необязательные параметры фактически потребуются для этого кода.)

(Кроме того, я бы серьезно пересмотрел ваши имена ... Я знаю, что это только пример кода, но вообще говоря, префиксы, такие как "p" для параметров, не рекомендуются, как правило, и методы, как правило, являются Pascal- обсаженные.)

7 голосов
/ 17 ноября 2010

Попробуйте перегрузить метод, а не

    public void getno(int pvalu)
    {
        getno(pvalu, "");
    }

    public void getno(int pvalu, string pname)
    {

    }

Взгляните на Рекомендации по использованию метода

См. Также .Net 4 Именованные и дополнительные аргументы (Руководство по программированию в C #)

2 голосов
/ 17 ноября 2010

Дополнительные параметры были введены в C # 4.0 - какую версию вы используете?

VB.NET всегда имел необязательные параметры.

Вы всегда можете использовать перегрузки и объединение методов для получения аналогичных возможностей:

public void getno(int pvalu)
{
   getno(pvalue, "");
}


public void getno(int pvalu, string pname)
{

}
1 голос
/ 17 ноября 2010

Компилируете ли вы с помощью компилятора .NET 4 (например, VS 2010), поскольку только этот компилятор поддерживает необязательные параметры для C #?

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

Спасибо Джону Скиту за разъяснение различий между таргетингом на .NET 4 и использованием компилятора .NET 4.

0 голосов
/ 17 ноября 2010

Необязательные параметры поддерживаются в C # начиная с версии 4, убедитесь, что ваш проект настроен на компиляцию с использованием компилятора C # 4.

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