2010-07-07 2 views
4

나는 아래처럼 뭔가를하려고했지만 그것은 작동하지 않습니다. 왜 .NET에서는이 작업을 수행하지 않습니까? C# 카메라 3.0부터익명 형식을 매개 변수로 함수에 전달할 수없는 이유는 무엇입니까?

private void MyFunction(var items) 
{ 
//whatever 
} 
+2

단지 'var'로 정의 된 변수는 익명이 아닌 암시 적으로 입력됩니다. 익명 유형은 전혀 다른 볼 게임입니다. 'var'는 익명 타입과 함께 사용할 수 있습니다 만, 객체 *가 익명 타입이 아님을 의미하지는 않습니다. – Nate

답변

7

, 방법 범위에서 선언 된 변수 내재 형 VAR을 가질 수있다. 암시 적으로 형식화 된 로컬 변수는 사용자가 직접 형식을 선언 한 것처럼 강력하게 형식화되지만 컴파일러에서 형식을 결정합니다. 나는 다음 두 선언은 기능적으로 동일합니다

var i = 10; // implicitly typed 
int i = 10; //explicitly typed 

otherwords에서, var 키워드는 변수 만 범위가 로컬로 허용됩니다.

Source.

조금 더 많은 정보 here. 기본적으로 var을 사용할 때 컴파일러가 어떤 유형인지 알 수 있도록 변수를 동일한 행의 값으로 초기화해야합니다.

+0

동적 키워드가 여기에 어떤 용도로 사용되는지 궁금합니다 ... –

+1

@VincentVancalbergh 나는 '동적 인'이 OP가 사용하는 용도로 제공 할 것이라고 생각합니다. – Nate

1

C#은 강력한 형식의 언어이므로 익명 형식을 추가해도 변경되지 않았습니다.

private void MyFunction(object items) 
{ 
    //Typecast to whatever you like here....But frankly this is a "code smell" 
} 

은 아마 당신은 당신이 달성하려고하는 것을 우리에게 말해 줄 수

당신은 물론 함수 타입의 객체 (또는 객체의 배열)의 변수를 전달할 수는, 어쩌면 더 좋은 디자인이있다.

2

엄밀히 말하면 익명 형식을 인수로 전달할 수 있지만 강력한 형식으로 멤버에 액세스 할 수는 없습니다. generic 타입 인자를 사용하여 추론합니다 :

public static int Foo<T>(T obj) 
{ 
    return obj.GetHashCode(); 
} 

public static void Main() 
{ 
    var anonymousType = new { Id = 2, Name = "Second" }; 
    var value = Foo(anonymousType); 
} 
관련 문제