Из §10.6.1 спецификации C # 4:
Выражение в аргументе по умолчанию должно быть одним из следующих:
- a константа-выражение
- выражение вида
new S()
, где S
- тип значения - выражение выраженияform
default(S)
, где S
- тип значения
* Выражение должно быть неявно конвертируемым с помощью преобразования идентификатора или значения NULL в тип параметра.
Что означает для BigInteger
то, что единственным параметром для аргумента по умолчанию является использование 0, выраженного как new BigInteger()
или default(BigInteger)
.
BigInteger x = 0
не работает,потому что 0
имеет тип int
, и неявное преобразование из int
в BigInteger
не является «преобразованием идентификатора или обнуляемым значением».
Если вы хотите, чтобы аргумент по умолчанию был чем-то другим, кроме0, у вас есть несколько вариантов:
- использовать
BigInteger?
, пусть по умолчанию будет null
и в начале метода chспасибо за это.Если параметр null
, установите для него значение по умолчанию. - создайте еще одну перегрузку метода, которая принимает, например,
int
с указанным аргументом по умолчанию.Этот метод в свою очередь вызывает перегрузку BigInteger
, которая не имеет аргумента по умолчанию.Это предполагает, что значение по умолчанию вписывается в int
, но я думаю, что так должно быть в большинстве случаев.