C#은 많은 연산자를 제공합니다. 기본 제공 형식은 이러한 연산자를 많이 지원하므로 이러한 형식의 값을 사용하여 기본 작업을 수행할 수 있습니다.
C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.
설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.
팁 (조언)
C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.
이러한 연산자는 다음 그룹을 포함합니다.
- 숫자 피연산자를 사용하여 산술 연산을 수행하는 산술 연산자
- 숫자 피연산자를 비교하는 비교 연산자
- 피연산자를 사용하여 논리 연산을 수행하는
bool자 - 정수 계열 형식의 피연산자를 사용하여 비트 또는 시프트 연산을 수행하는 비트 및 시프트 연산자
- 피연산자가 같은지 여부를 확인하는 같음 연산자
일반적으로 이러한 연산자를 오버로드 할 수 있습니다. 연산자를 오버로드하여 사용자 정의 형식의 피연산자에 대한 연산자 동작을 지정합니다.
가장 간단한 C# 식은 리터럴(예: 정 수 및 실수 )과 변수 이름입니다. 연산자를 사용하여 복잡한 식으로 결합할 수 있습니다. 연산 자 우선 순위 및 결합성은 식의 연산이 수행되는 순서를 결정합니다. 괄호를 사용하여 연산자 우선 순위 및 결합성에 의해 부과되는 평가 순서를 변경할 수 있습니다.
다음 코드에서 식의 예제는 할당의 오른쪽에 표시됩니다.
int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);
string s = "String literal";
char l = s[s.Length - 1];
List<int> numbers = [..collection];
b = numbers.FindLast(n => n > 1);
일반적으로 식은 결과를 생성하고 다른 식에 포함할 수 있습니다.
void 메서드 호출은 결과를 생성하지 않는 식의 예입니다. 다음 예제와 같이 문으로만 사용할 수 있습니다.
Console.WriteLine("Hello, world!");
다음은 C#이 제공하는 다른 종류의 식입니다.
형식이 지정된 문자열을 만드는 편리한 구문을 제공하는 보간된 문자열 식:
var r = 2.3; var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}."; Console.WriteLine(message); // Output: // The area of a circle with radius 2.3 is 16.619.익명 함수를 만들 수 있는 람다 식:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25C#에서 직접 쿼리 기능을 사용할 수 있는 쿼리 식:
int[] scores = { 90, 97, 78, 68, 85 }; IEnumerable<int> highScoresQuery = from score in scores where score > 80 orderby score descending select score; Console.WriteLine(string.Join(" ", highScoresQuery)); // Output: // 97 90 85
식 본문 정의를 사용하여 메서드, 생성자, 속성, 인덱서 또는 종료자에 대한 간결한 정의를 제공할 수 있습니다.
연산자 우선 순위
여러 연산자가 있는 식에서 우선 순위가 높은 연산자는 우선 순위가 낮은 연산자보다 먼저 평가됩니다. 동일한 우선 순위의 연산자는 어휘 순서로 평가됩니다. 다음 예제에서는 더하기보다 우선 순위가 높기 때문에 곱하기가 먼저 수행됩니다.
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
괄호를 사용하여 연산자 우선 순위에 의해 적용되는 평가 순서를 변경합니다.
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
다음 표에서는 가장 높은 우선 순위에서 가장 낮은 우선 순위로 시작하는 C# 연산자를 나열합니다. 각 행 내의 연산자는 동일한 우선 순위를 갖습니다.
| 운영자 | 범주 또는 이름 |
|---|---|
x.y, f(x), a[i], x?.y, , x?[y]x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> |
기본 |
| +x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true 및 false | 단항 |
| x..y | 범위 |
| switch, with |
switch 및 with 식 |
| x * y, x / y, x % y | 곱셈 |
| x + y, x – y | 첨가물 |
| x << y, x >> y, x >>> y | 변화 |
| x < y, x > y, x <= y, x >= y, is, as | 관계형 및 형식 테스트 |
| x == y, x != y | 평등 |
x & y |
부울 논리 AND 또는 비트 논리 AND |
x ^ y |
부울 논리 XOR 또는 비트 논리 XOR |
x | y |
부울 논리 OR 또는 비트 논리 OR |
| x&y | 조건부 AND |
| x || 와이 | 조건부 OR |
| X?? y | Null 병합 연산자 |
| C? t : f | 조건부 연산자 |
| x = y, x += y, x -= y, x *= y, x /= y, x %= y, x > y, x |= y, x ^= y, x = y, x <<= y, x >>?? >>> = y, => | 대입 및 람다 선언 |
논리 패턴 조합기의 우선 순위에 대한 자세한 내용은 패턴 문서의 논리 패턴 검사 우선 순위 및 순서 섹션을 참조하세요.
연산자 연결성
연산자의 우선 순위가 같으면 연산자의 결합성은 연산이 수행되는 순서를 결정합니다.
-
왼쪽 결합 연산자는 왼쪽에서 오른쪽으로 순서대로 평가됩니다.
할당 연산자 및 null 병합 연산자를 제외하고 모든 이진 연산자는 왼쪽 연결 연산자입니다. 예를 들어 .로
a + b - c(a + b) - c평가됩니다. -
오른쪽 결합 연산자는 오른쪽에서 왼쪽으로 순서대로 평가됩니다. 할당 연산자, null 병합 연산자, 람다 및 조건부 연산
?:자는 오른쪽 결합형입니다. 예를 들어 .로x = y = zx = (y = z)평가됩니다.
중요합니다
폼 P?.A0?.A1의 식에서 if P is null, 둘 다 A0 평가되지도 않습니다 A1 . 마찬가지로, 형식 P?.A0.A1A0 의 식에서 null일 때 P 평가되지 않으므로 둘 다 아닙니다A0.A1. 자세한 내용은 C# 언어 사양 을 참조하세요.
괄호를 사용하여 연산자 연결성에 의해 적용되는 평가 순서를 변경합니다.
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
피연산자 평가
연산자 우선 순위 및 결합성과 관련이 없는 식의 피연산자는 왼쪽에서 오른쪽으로 계산됩니다. 다음 예제에서는 연산자와 피연산자가 평가되는 순서를 보여 줍니다.
| 표현 | 계산 순서 |
|---|---|
a + b |
a, b, + |
a + b * c |
a, b, c, *, + |
a / b + c * d |
a, b, /, c, d, *, + |
a / (b + c) * d |
a, b, c, +, /, d, * |
일반적으로 모든 연산자 피연산자가 평가됩니다. 그러나 일부 연산자는 조건부로 피연산자를 평가합니다. 이 조건은 이러한 연산자의 맨 왼쪽 피연산자 값이 다른 피연산자를 계산해야 하는지 또는 어떤 피연산자를 평가해야 하는지를 정의한다는 것을 의미합니다. 이러한 연산자는 조건부 논리 AND(&&) 및 OR(||) 연산자, null 병합 연산 ?? 자 및??=, null 조건부 연산 ?. 자 및 ?[]조건부 연산자?:입니다. 자세한 내용은 각 연산자의 설명을 참조하세요.
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.
참고하십시오
- 연산자 오버로드
- 표현식 트리
.NET