팁 (조언)
이 문서는 이미 하나 이상의 프로그래밍 언어를 알고 있으며 C#을 학습하는 개발자를 위한 기본 사항 섹션의 일부입니다. 패턴을 접하는 경우 패턴 일치 개요부터 시작합니다. 전체 구문에 대해서는 discard 패턴 참조를 참조하세요.
밑줄 토큰(_)은 값이 필요하지 않다는 것을 전달합니다. 정확한 의미는 표시되는 위치에 따라 달라집니다.
| Context | 의 의미 _ |
|---|---|
| 스위치 식의 분기 또는 중첩 패턴 | 결과를 캡처하지 않고 일치하는 삭제 패턴 |
분해 또는 out 인수 |
생성된 값 하나를 무시하는 무시 |
과 같은 과제 _ = expression |
식을 평가하고 그 결과를 무시하는 버리기 할당 |
명명된 두 개 이상의 람다 매개 변수 _ |
입력이 사용되지 않는 매개 변수 삭제 |
패턴 내의 var _ |
var 취소 지정이 있는 패턴 |
이러한 양식은 맞춤법과 의도를 공유하지만 교환할 수는 없습니다.
switch와 패턴 일치
다음 예에서 statusCode는 int입니다. 각 스위치 암은 string 메시지를 생성하며, 프로그램은 이를 콘솔에 기록합니다. 마지막 _은 200 및 404를 제외한 모든 상태 코드를 처리합니다:
static void ShowStatus()
{
int statusCode = 503;
string message = statusCode switch
{
200 => "Ready",
404 => "Not found",
_ => "Another status"
};
Console.WriteLine(message);
}
무시 패턴은 입력 식에 적용됩니다. C#은 식을 평가하며, _는 평가된 값과 일치하지만 이를 캡처하지는 않습니다. 이전에 처리되지 않은 모든 값에 동일한 대체 동작을 적용해야 하는 경우, 최종 스위치 식 분기로 _를 선택합니다. 를 포함하여 null모든 항목과 일치하므로 마지막에 넣습니다.
양식 var _ 은 var 취소 지정이 있는 패턴입니다. 또한 평가된 모든 값과 일치하지만 읽을 수 있는 변수를 도입하지는 않습니다. 스위치 catch-all에 대해 더 짧은 _ 무시 패턴을 선호합니다. 패턴 및 지정에 대한 var 자세한 내용은 선언, 상수 및 var 패턴을 참조하세요.
구조 분해 선언
GetForecast는 네 개의 구성 요소로 이루어진 튜플을 반환합니다. 즉, string 도시와 최고 기온, 최저 기온, 강수 확률을 나타내는 세 개의 int 값입니다. 분해 선언은 프로그램에서 city와 high를 표시하므로 이를 유지합니다. 사용되지 않는 컴포넌트에 이름을 붙이면 코드에 그것들이 필요한 것처럼 보이기 때문에, 낮은 기온과 비 올 확률에는 _를 사용합니다:
static void ShowForecast()
{
var (city, high, _, _) = GetForecast();
Console.WriteLine($"{city}: high {high}°C");
static (string City, int High, int Low, int RainChance) GetForecast() =>
("Portland", 18, 9, 40);
}
개체 Deconstruct 의 메서드가 여러 값을 생성할 때 동일한 무시 구문이 작동합니다. 해당 형식에 대해서는 튜플 및 기타 형식의 분해를 참조하세요.
매개 변수를 사용하여 메서드 out 호출
입력 필드가 정수를 나타내는 경우에만 텍스트를 허용한다고 가정합니다.
TryParse(String, Int32) 메서드는 구문 분석의 성공 여부를 나타내는 bool를 반환합니다. 또한 out 매개변수를 통해 구문 분석된 int도 생성합니다. 다음 코드는 입력을 수락하거나 거부하려면 부울 결과만 필요합니다.
static void CheckInput()
{
string text = "42";
if (IsWholeNumber(text))
{
Console.WriteLine($"Accepted: {text}");
}
else
{
Console.WriteLine("Enter a whole number.");
}
static bool IsWholeNumber(string text) => int.TryParse(text, out _);
}
작업의 성공이 중요한 경우에만 사용합니다 out _ . 버리기 변수는 파싱된 숫자가 필요 없다는 점을 분명히 보여 줍니다. 이후 코드에 숫자가 필요한 경우 인수에 out 이름(예: out int number이름)을 지정하고 대신 해당 값을 유지합니다.
버리기 할당은 _ = expression 식을 평가하고 그 결과를 의도적으로 무시합니다. 식이 달리 유효한 문이 아닐 때 가끔 유용합니다.
Important
애플리케이션 코드에서 작업을 무시하기 위해 _ = Task.Run(...) 또는 _ = SomeAsyncMethod()를 사용하지 마세요. 작업을 기다리면 해당 작업의 완료 및 예외가 호출 흐름 내에 유지됩니다. 취소 할당은 작업을 안전하게 만들거나, 예외를 관찰하거나, 지원되는 fire-and-forget 작업을 만들지 않습니다.
사용되지 않는 람다 매개 변수 표시
EventHandler은 object? 발신자와 EventArgs 값을 받습니다. 다음 처리기에는 매개 변수가 필요하지 않습니다. 콘솔에 "Timer tick" 만 씁니다. 두 매개 변수 _ 의 이름을 모두 지정하면 본문에서 사용하지 않는 이름을 발명하지 않고 사용하지 않는 상태가 표시됩니다.
static void ShowLambdaDiscards()
{
EventHandler handler = (_, _) => Console.WriteLine("Timer tick");
handler(null, EventArgs.Empty);
}
대리자 서명에 람다 본문에서 사용하지 않는 입력이 필요한 경우 무시 매개 변수를 선택합니다. 람다에 명명 __ 된 매개 변수가 하나만 있는 경우 이전 버전과의 호환성을 위해 일반 매개 변수 이름으로 유지됩니다.
식별자로 사용하지 마십시오 _ .
_ 는 C#에서 삭제를 인식하지 못하는 컨텍스트에서 일반 식별자일 수 있습니다. 명명 _ 된 범위 내 변수는 취소 할당처럼 보이는 할당을 받을 수 있습니다. 패턴 컨텍스트에서는 _라는 이름의 접근 가능한 상수 또는 형식도 _가 해석되는 방식을 변경할 수 있습니다. 고유한 변수, 상수 또는 명명된 _형식을 선언하지 마십시오. 삭제 의도를 전달하는 데 사용합니다 _ .
참고하십시오
.NET