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