2014-03-04 2 views
1

Func으로 작성한 IDE가 Func 본문에 Func을 호출하는 것을 좋아하지 않으며, 왜 그 이유를 이해하지 못합니까? 왜냐하면 나는이 정확한 코드를 메소드 본체에 넣었고, 리턴 타입과 인자가 같은 매개 변수를 사용했기 때문이다. Func<XElement,TreeNode[]>의 생성자 가설 arrayDel 전에 함수를 호출 할 수 있기 때문에이는 초기화되지 않은 변수를 관찰 할 기능을 의미 초기화되어 허용되지 않습니다Func 본문 내에서 Func 함수 호출하기

Func<XElement, TreeNode[]> arrayDel = new Func<XElement,TreeNode[]>(a => 
     { 
      List<TreeNode> nodes = new List<TreeNode>(); 
      foreach (XElement item in a.Elements()) 
      { 
       if (item.HasElements) 
       { 
        nodes.Add(new TreeNode(item.Name.ToString(), arrayDel(item))); } 
       else 
       { 
        nodes.Add(new TreeNode(item.Name.ToString())); } 
      } 
      return nodes.ToArray(); 
+0

코드가 – Cynede

+0

@Heather 인 것처럼 보입니다. 그럼'arrayDel'을 (를) 클래스 정적/인스턴스 필드로 만들었을 것입니다. 그것들은 명시적인 초기화 프로그램이 실행되기 전에도 항상 초기화됩니다. 로컬 변수로 만들면 작동하지 않습니다. – hvd

+0

@hvd 알았어, 알았다. – Cynede

답변

4

:

여기에 코드입니다.

이후로는이 발생하지 않으며 그 경우 arrayDel의 값은 완전히 관련이 없으므로 변수를 먼저 더미 값으로 초기화하십시오.

Func<XElement, TreeNode[]> arrayDel = null; 
arrayDel = new Func<XElement,TreeNode[]>(...); 
+0

@Hather 아니, 그건 효과가 없을거야. 'var'는 변수에 대한 이후의 할당이 아닌 initialiser에서 타입을 가져오고,'null'은 타입을 갖지 않습니다. – hvd

+0

그래, 고마워! :) –