Działa to dobrze:Nieoczekiwany wyjątek od konstruktora XDocument
XDocument xdoc = new XDocument(
new XDeclaration("1.1", "UTF-8", "yes"),
new XProcessingInstruction("foo", "bar"),
new XElement("test"));
Jednak jeśli zmienię go przekazać "tablicę params" jawnie jako tablica:
object[] content = new object[] {
new XDeclaration("1.1", "UTF-8", "yes"),
new XProcessingInstruction("foo", "bar"),
new XElement("test")
};
xdoc = new XDocument(content);
nie jest on z:
System.ArgumentException: Nie białe znaki spacji nie mogą być dodawane do treści.
Czy te dwa przykłady nie są dokładnie równoważne? Co tu się dzieje?
widzę; Nie zdawałem sobie sprawy, że nazywam różne przeciążenia. To trochę niefortunne, że 'XDocument (object [])' akceptuje wszystkie rodzaje obiektów, ale z jakiegoś powodu wyklucza XDeclaration. –
Zastanawiam się, czy projektanci języka zmieniliby implementację argumentów 'params' teraz, jeśli mieliby taką szansę. Jest to nieoczywista pułapka, której można by uniknąć, gdyby można było wyraźnie wskazać, że przekazujesz varargs na stronie połączenia w jakiś sposób.ll –