Domanda

Apparentemente i parametri facoltativi non funzionerà in C # XNA Se utilizzato su Xbox, la non supersness è indicata durante la compilazione.

Ho una situazione come questa:

func(float? a = null, int? b = null)
.

Con un gran numero di parametri facoltativi di sensibile che predefinito il valore "indefinito", null. Questa situazione è richiesta.

Nell'esempio semplificato sopra questo può essere scartato, anche se non è così che i parametri facoltativi consentono:

func()
func(float? a)
func(int? b)
func(float? a, int? b)
.

Tuttavia con un gran numero di parametri questo non è pratico.

Alcune combinazioni di definizione dei parametri non sono consentite e si traducono nei percorsi attraverso la funzione in cui lancio eccezioni di argomentazione, altri causano varie cose diverse che si verificano a seconda dei valori dei parametri. Questo è simile al polimorfismo tra le funzioni con lo stesso nome ma non è la stessa.

Potrei in alternativa, e probabilmente più praticamente, richiedono invece tutti i parametri.

func(float? a, int? b)
.

Quindi chiamare come:

func(null, 4)
.

dove il primo non è definito.

Invece di utilizzare uno dei fraghi sopra, esiste un modo per abilitare i parametri opzionali in c # xna su Xbox?

È stato utile?

Soluzione

Sono certamente eseguito su Xbox con parametri opzionali, ma ha richiesto un po 'di modifica delle impostazioni di build.Da ciò che ricordo non funzionerà con WP7.

Penso che potrebbe essere stato correlato alla versione della lingua utilizzata.

Controlla i seguenti collegamenti:

http://msdn.microsoft.com/en-us/library/FF827884.aspx

http://forums.create.msdn.com/forums/P / 54007 / 327944.aspx

Altri suggerimenti

Utilizzerei i sovraccarichi antiquati che prendono diversi numeri di parametri e inoltrano le chiamate da lì, insieme ai valori "predefiniti".Codice zero cambia ai chiamanti.

Se i tipi sono al di fuori del controllo: metodi di estensione per aggiungere i sovraccarichi.

Non penso che tu possa abilitare i parametri opzionali.Forse puoi usare un'alternativa.Come la parola chiave params che crea un array, è possibile passare un oggetto come parametro

public class MyParams 
{
     public float? a {get;set;}
     public int? b {get;set;}
}

func(new MyParams { b = 5 });
.

Con quella soluzione, hai tutta la flessibilità che potresti desiderare.Puoi aggiungere, rimuovere i parametri senza pensare di aggiungere / rimozione di un nuovo sovraccarico.E se rimuovi o modifica un parametro, riceverai un errore del tempo di compilazione, qualcosa che potresti non ottenere con più sovraccarichi.

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