2010-05-19 2 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! 
     } 
    } 

답변

0

이 작업을 수행 할 수 - 가장 가까운 점은 Alphabet 돌려주는 static 팩토리 메소드 생성하는 것입니다 :

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

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

주어진 있지만 귀하의 예를

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

나는 당신이하려는 것을 모른다. ExceptionInitializer 및 NullableAssignment를 표시 할 수 있습니까? 매개 변수가 전달되지 않을 때 _alphabet에 빈 배열을 할당 하시겠습니까?

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

이 인수를 무제한으로 또는 명시 적으로 널 (null)에 대한 작동합니다

당신이 제안하는 코드는 C#에서 유효하지 않은
new Alphabet('f', 'o', 'o') 
new Alphabet() 
new Alphabet(null) 
2

, 당신은 에 값을 할당 할 수 없습니다. 이 경우 특별한에 list이 빈 상태 (empty)이 아닌,

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

난 당신이 Alphabetlist의 요소를 처리하기위한 생성자를 원하는 같은데요 : 당신이 할 수있는 것은이 같은 기본 생성자에 전화를 사용하는 것입니다 "빈 객체"를 사용해야합니다. 불행히도 이것은 일반적인 생성자를 사용하여 수행 할 수 없습니다. 당신이 대신 필요한 것은 공장 방법 :

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

내가 항구 건설을 사용하려면 : 더 간단는 널 (null)의 자리에 빈 배열을 할당하는 것 ctor 매개 변수없이 기본 영어 알파벳을 만듭니다. 공장 방법을 사용하는 것이 내 문제를 해결하는 가장 좋은 방법이라고 생각합니다. 여러분 모두에게 감사드립니다. – xWoundwortx

0
public Alphabet() { 
    ConstructEmptyAlphabet(); 
} 

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

private void ConstructEmptyAlphabet() { 
    … 
} 
관련 문제