Короче. Нет.
Необязательные параметры необходимы для компиляции временных констант или типов значений.
Из Именованные и необязательные аргументы (Руководство по программированию на C #) в MSDN:
Каждый необязательный параметр имеет значение по умолчанию, как часть его определения. Если для этого параметра не отправляется аргумент, используется значение по умолчанию. Значение по умолчанию должно быть одним из следующих типов выражений:
- константное выражение;
- выражение вида
new ValType()
, гдеValType
- значение type, например enum или struct;- выражение вида
default(ValType)
, гдеValType
- тип значения.То, что вы хотите достичь, может быть достигнуто путем перегрузки:
public string Download() { return Download(Encoding.UTF8); } public string Download(Encoding contentEncoding) { defaultEncoding = contentEncoding ?? Encoding.UTF8; // codes... }
Обратите внимание, что это не совсем то же самое, что и дополнительные параметры, поскольку значение по умолчанию становится жестко закодированным в вызывающем абоненте с дополнительным параметров (поэтому существуют ограничения для них).
my %score_lookup;
{
my $found_header = 0;
my @col_ids;
while (<>) {
next if /^#/;
if ($found_header) {
my ($row_id, @fields) = split;
for my $i (0..$#fields) {
my $col_id = $col_ids[$i];
my $score = $fields[$i];
$score_lookup{ $row_id . $col_id } = $score;
}
} else {
$found_header = 1;
@col_ids = split;
}
}
}
my $score = $score_lookup{ "A" . "R" }; # -2