Visual Studio 2012의 Visual C# 주요 변경 내용
이 문서의 내용
다음 표에서 변경에서 Visual C#에서 Visual Studio 2012 는 수에서 Visual C# Visual Studio 2010에서 컴파일하기에서 만든 응용 프로그램을 방지 하거나 이러한 응용 프로그램의 런타임 동작을 변경.
람다 식
반복 변수를 사용할 수 있습니다는 foreach 루프의 본문에 포함 된 람다 식에서 문을.
사용은 foreach 중첩 된 람다 식에 반복 변수를 더 이상 예기치 않은 결과 생성 합니다.다음 예제에서는 변수를 사용 하 여 word 는 람다 식입니다.
static void Main ()
{
var methods = new List<Action>();
foreach (var word in new string [] { "hello" , "world" })
{
methods.Add (() => Console.Write (word + " " ));
}
methods[0 ]();
methods[1 ]();
}
// Output in Visual Studio 2012:
// hello world
// Output in Visual Studio 2010:
// world world
LINQ 식입니다.
반복 변수를 사용할 수 있습니다는 foreach 문 루프의 본문에 포함 된 LINQ 식에서입니다.
사용은 foreach LINQ 식에 반복 변수를 더 이상 예기치 않은 결과 생성 합니다.다음 예제에서는 변수를 사용 하 여 number LINQ 쿼리에서.
static void Main ()
{
var lines = new List<IEnumerable<string >>();
int [] numbers = { 1 , 2 , 3 };
char [] letters = { 'a' , 'b' , 'c' };
foreach (var number in numbers)
{
var line = from letter in letters
select number.ToString () + letter;
lines.Add (line);
}
foreach (var line in lines)
{
foreach (var entry in line)
Console.Write (entry + " " );
Console.WriteLine ();
}
}
// Output in Visual Studio 2012:
// 1a 1b 1c
// 2a 2b 2c
// 3a 3b 3c
// Output in Visual Studio 2010:
// 3a 3b 3c
// 3a 3b 3c
// 3a 3b 3c
명명 된 인수
명명 된 인수와 위치 인수가에 대 한 메서드 호출에서 결과가 이제 오른쪽으로 왼쪽에서 발생할 인수 목록에서.
부작용에서 메서드 호출에 결합 된 명명 된 인수와 위치 인수가 이제 생산 왼쪽에서 오른쪽으로 호출 문의 인수 목록입니다.다음 예제에서 TestMethod 다른 순서로 명명 된 인수와 위치 인수가 함께 사용 하 여 호출 됩니다.
class Program
{
static void Main (string [] args)
{
TestMethod (WriteLetter ("A" ), b: WriteLetter ("B" ), c: WriteLetter ("C" ));
TestMethod (WriteLetter ("A" ), c: WriteLetter ("C" ), b: WriteLetter ("B" ));
}
static int WriteLetter (string letter)
{
Console.Write (letter + " " );
return 1 ;
}
static void TestMethod (int a, int b, int c)
{ }
// Output in Visual Studio 2012:
// A B C A C B
// Output in Visual Studio 2010:
// B C A C B A
}
오버 로드 확인
오버 로드 확인이 사용 하는 호출에 대해 향상 된 명명 된 인수 를 포함 하는 액세스 방법에 params 매개 변수.
해상도 둘 이상의 후보가 발견 되 면 가장 구체적인 형식을 일치 명명 된 인수에 대 한 오버 로드 확인을 선호 합니다.인수에 대 한 필수 또는 호출에 제공 되지 않은 매개 변수는 일치 하는 형식을 오버 로드 후보에 동등 하 게 좋은 경우에 간주 됩니다.
다음 예제에서 string 보다 나은 형식인 object 에 대 한 p2.버전에 따라서 ExampleMethod 매개 변수에서 p2 문자열을 선택 하면 세 번째 있더라도 정의 params 매개 변수입니다.
class Program
{
static void Main (string [] args)
{
ExampleMethod (p2: "" );
}
public static void ExampleMethod (string p1 = null , object p2 = null )
{
Console.WriteLine ("ExampleMethod: p2 is object" );
}
public static void ExampleMethod (string p2 = null , object p1 = null , params int [] p3)
{
Console.WriteLine ("ExampleMethod: p2 is string" );
}
}
// Output in Visual Studio 2012:
// ExampleMethod: p2 is string
// Output in Visual Studio 2010:
// ExampleMethod: p2 is object
오버 로드 확인
오버 로드 확인에 대 한 호출 간에 알고리즘 선택 해야 위치 향상에 Func<object> 매개 변수 및 Func 매개 변수가 다른 형식 매개 변수 (예를 들어, string 또는 int?)에 Func<dynamic> 인수.
다음 예제에서는 호출에서 CandidateMethod 보내는입니다는 Func<dynamic> 인수가 두 해상도 후보.후보 중 하나에 해당 매개 변수가 Func<object>, 및 다른 매개 변수가 해당 Func<string>.
가진 오버 로드 후보는 Func<object> 때문에 매개 변수를 선택 해야 object 및 dynamic 해당 하는 것으로 간주 됩니다.따라서 동일 변환은 없습니다 사이 에서만 존재 dynamic 및 object 또한 생성 된 형식 사이 Func<dynamic> 및 Func<object>.
class Program
{
public static void CandidateMethod (Func<object > fun)
{
Console.WriteLine ("Method that has a Func<object> parameter." );
}
public static void CandidateMethod (Func<string > fun)
{
Console.WriteLine ("Method that has a Func<string> parameter." );
}
static void Main (string [] args)
{
dynamic dyn = 15 ;
CandidateMethod (() => { return dyn; });
}
}
// Output in Visual Studio 2012:
// Method that has a Func<object> parameter.
// Output in Visual Studio 2010 if Microsoft.CSharp is referenced:
// Method that has a Func<string> parameter.
// Output in Visual Studio 2010 if Microsoft.CSharp isn't referenced (for instance, in a Unit Test Project):
// Method that has a Func<object> parameter.
참고 항목
참조
람다 식(C# 프로그래밍 가이드)
params(C# 참조)
dynamic(C# 참조)
개념
명명된 인수와 선택적 인수(C# 프로그래밍 가이드)
기타 리소스
Visual C# 시작
때 주요 언어 수정 된 주요 변경?