2010-05-19 7 views
0
public Alphabet(params char[] list) 
    { 
     this.ExceptionInitializer(); 
     try 
     { 
      if (list != null) _alphabet = list; 
      else throw this.NullableAssignment; //add exception handler; 
      this._charCounter = list.Length; 
     } 
     catch (this.NullableAssignment) 
     { 
      // var x = new Alphabet(); 
      // this = x;  //FAIL! 
     } 
    } 

Répondre

0

Vous ne pouvez pas le faire - la chose la plus proche serait de créer une méthode de fabrication statique qui retourne un Alphabet:

public class Alphabet 
{ 
    private Alphabet(params char[] list) 
    { 
     //setup 
    } 

    public static Alphabet Create(params char[] list) 
    { 
     return list == null 
      ? new Alphabet() 
      : new Alphabet(list); 
    } 
} 

Bien donné votre exemple , serait tout simplement encore plus simple d'attribuer un tableau vide à la place de null:

public Alphabet(params char[] list) 
{ 
    _alphabet = list ?? new char[] { }; 
    this._charCounter = _alphabet.Length; 
} 
0

Je ne sais pas ce que vous essayez de faire. Pouvez-vous afficher ExceptionInitializer et NullableAssignment? Voulez-vous affecter un tableau vide à _alphabet lorsque aucun paramètre n'est transmis?

public Alphabet(params char[] list) 
{ 
    if(list != null) 
    { 
     _alphabet = list; 
    } 
    else 
    { 
     _alphabet = new char[0]; 
    } 
    this._charCounter = _alphabet.Length; 
} 

Cela fonctionne pour un certain nombre d'arguments, ou un nul explicite:

new Alphabet('f', 'o', 'o') 
new Alphabet() 
new Alphabet(null) 
2

Le code que vous proposez est pas valide en C#, vous ne pouvez affecter aucune valeur à ce. Ce que vous pouvez faire est d'utiliser un appel à un constructeur par défaut comme ceci:

public Alphabet() { /* Do some default initialization here */ } 

public Alphabet(params char[] list) : this() // The call to the default constructor. 
{ 
    if (list != null) 
    { 
     _alphabet = list; 
     this._charCounter = list.Length; 
    } 
} 
0

Je devine que vous voulez que le constructeur de Alphabet pour traiter les éléments de list, à moins que list est vide auquel cas un spécial "objet vide" doit être utilisé. Ceci, malheureusement, ne peut pas être accompli en utilisant un constructeur normal. Qu'est-ce que vous avez besoin est plutôt une méthode de fabrication:

private static Alphabet _emptyAlphabet = new Alphabet(); 
private Alphabet(char[] list) { /* etc */ } 

public Alphabet CreateAlphabet(params char[] list) 
{ 
    if (list == null) 
    { 
     return _emptyAlphabet; 
    } 
    else 
    { 
     return new Alphabet(list); 
    } 
} 
+0

Je veux utiliser constru ctor sans paramètres pour créer un alphabet anglais par défaut. Je pense que l'utilisation d'une méthode d'usine est la meilleure façon de résoudre mon problème. Merci à vous tous – xWoundwortx

0
public Alphabet() { 
    ConstructEmptyAlphabet(); 
} 

public Alphabet(char[] list) { 
    if (list == null) { 
     ConstructEmptyAlphabet(); 
    } else { 
     _alphabet = list; 
     this._charCounter = list.Length; 
    } 
} 

private void ConstructEmptyAlphabet() { 
    … 
} 
Questions connexes