Как выше.
я использую stringbuilder.append ().
Очень простой, и можно тогда сделать xmldocument.load (strinbuilder объект как параметр).
Вы будете, вероятно, использовать string.concat в добавлять параметре, но это - очень простой подход.
Он будет компилироваться без предупреждений и выберет первую перегрузку.
С введением необязательных и именованных параметров механизм разрешения перегрузки в C # стал действительно сложным. Однако в данном конкретном случае это имеет смысл. Как обычно, компилятор выберет наиболее конкретную перегрузку, соответствующую аргументам.
Я не верю, что этот конкретный случай сильно отличается от C # 1.0:
public void SomeMethod(Int32 x, Int32 y) { }
public void SomeMethod(Int32 x, Int32 y, params Int32[] z) { }
, который работает идентично (с точки зрения разрешения перегрузки).
Последующий ответ: Я так не думаю. Боюсь, вам придется вручную указывать аргумент по умолчанию при вызове метода. Однако, если параметр x
или y
имеет другое имя, например:
public void SomeMethod(Int32 x, Int32 y) { }
public void SomeMethod(Int32 t, Int32 y, Int32 z = 0) { }
, вы можете выбрать вторую перегрузку с помощью:
obj.SomeMethod(t: 10, y: 20);
Это рассматривается в разделе «Разрешение перегрузки» этой главы.
Когда у компилятора есть два варианта, которые в остальном равны, он будет использовать перегрузку, которая не требует использования каких-либо неподдерживаемых дополнительных параметров, вместо того, чтобы , но это строгий двоичный выбор. Если ему придется выбирать между перегрузкой с одним неподдерживаемым необязательным параметром и двумя, он сочтет это неоднозначной ситуацией.
Чтобы ответить на ваш последующий комментарий, я не делаю этого. Я знаю любой способ принудительно использовать перегрузку с необязательным параметром без его указания. Вы не можете использовать ни один из них, например:
// Both invalid
sc.SomeMethod(15, 23, );
sc.SomeMethod(15, 23, z:)
Если, однако, ваши методы использовали другие имена параметров, вы могли бы сделать это, тогда:
public void SomeMethod(Int32 x, Int32 y) { ... }
public void SomeMethod(Int32 a, Int32 b, Int32 c = 0) { ... }
sc.SomeMethod(a: 15, b: 23); // Calls second method