Domanda

Sono abbastanza nuovo per C #, e cercando di capire inserimenti di stringa (vale a dire "some {0} string", toInsert), e sono imbattuto in un problema che non mi aspettavo ...

Nel caso in cui si dispone di due costruttori:

public MyClass(String arg1) { ... }

public MyClass(String arg1, String arg2) { ... }

E 'possibile per me di utilizzare il primo costruttore con un inserimento stringa?

...
toInsert = "def"
myClass = new MyClass("abc{0}ghi", toInsert)
...

In alternativa sarà C # interpretare questo come il secondo costruttore e passare un "abc{0}ghi" letterale come primo argomento?

È stato utile?

Soluzione

Sì, questo sarà interpretato come solo un secondo parametro.

Il comportamento descritto si chiama formattazione di stringhe e tutto ciò che accetta stringhe in questo stile utilizza string.Format () in background. Vedere la documentazione di tale metodo per i dettagli.

Per ottenere il comportamento desiderato, utilizzare questo codice:

myClass = new MyClass(string.Format("abc{0}ghi", toInsert));

Altri suggerimenti

Basta fare:

public MyClass(string format, params object[] args)
{
  this.FormattedValue = string.Format(format, args);
}
  

In alternativa sarà C # interpretare questo come il   secondo costruttore e passare un letterale   "Abc {0} ghi" come primo argomento?

Questa è la risposta giusta. Penso che se si utilizza String.Format ( "abc {0} ghi", toInsert) allora ci vorrà il primo costruttore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top