2012-05-05 3 views
1

이 예에서는 준다 "형식 또는 네임 스페이스 이름 '합니다 MyType이'을 (를) 찾을 수 없습니다 (당신은 using 지시문 또는 어셈블리 참조가?)"C#에서 별칭 지시문을 사용하여 재귀를 선언 할 수 있습니까?

using MyType = System.Func<System.Int32, System.Tuple<System.Int32, MyType>>; 

는 모든 가능한 그것을 것은 재귀 형식을 선언합니다 이거?

+2

나는 보통 이것을 묻지 않지만 왜 ...? –

+0

저는 C#의 액터 모델의 최소 인코딩을 선언하려고 노력하고 있습니다. 따라서 배우의 본질을 변화시키는 동작을 모델링하기 위해 재귀 함수 별칭을 사용하겠습니다. –

+1

나는 그것에 대해 몇 분 이상 생각하지 못했지만 내 생각에는 아마도 당신은 일종의 일반 공장을 원할 것입니다. 'public Func > 액션을 가진 객체를 반환하는'CreateActor ''하지만 나는 머리 꼭대기에서 어떤 구체적인 것을 가지고 있지 않습니다. –

답변

1

아니요, 가능하지 않다고 생각합니다. using 구문의 오른쪽은 별칭을 할당하기 전에 실제 형식으로 확인해야합니다. 귀하의 경우, 오른쪽 측면을 해결하기 위해 컴파일러는 allias를 정의해야합니다.이를 통해 오른쪽 측면을 해결해야합니다. 이 재귀적인 문제는 끝이 없기 때문에 컴파일러는 분명히 신경 쓰지 않을 것입니다. 당신의 별칭을 컴파일 관리 컴파일러를 가정 할 수 있으며 내가 그랬어이 :

여기에 더 명확 문제가 확인하려면

MyType mytype = x => Tuple<int, MyType>.Create(x, ???); 

무엇을 할 수 I 반환 값을 정의하는 함수의 본문에서 가능한 넣어 ? 결국 나는 어딘가에 구조형을 반환해야합니다.

+0

MyType myType = x => 터플 . 만들기 (x + 1, (y) => myType (y + x) .Item2); –

+0

하지만 당신이 옳다고 생각합니다.이 접근법은 결과보다 더 많은 두통을 초래할 것입니다 ... –

0

사용 지침 (파일의 맨 위에 있음)과 MyType이 있다고 가정하면 네가 가능합니다. 예를 들어, 이것은 완벽하게 합법적입니다.

using System; 
using String = System.Func<System.String>; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String myString =() => "Foo"; 
      // myString is now a function returning the string "Foo". Yikes. 
     } 
    } 
} 

즉, 절대로 코드 검토를 통과하지 못합니다. 혼란에 대해 이야기하십시오.

+0

나는 그가 원하는 것을 생각하지 않는다 : "String"을 "Foo"로 대체하고 함수를 리턴 한 함수를 반환하는 함수가있다. –

+0

문자열 예제는 " 네임 스페이스 이름 'String'을 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) " –

+0

컴파일되도록 편집되었습니다. –

관련 문제