문자열(C# 프로그래밍 가이드)Strings (C# Programming Guide)

문자열은 값이 텍스트인 String 형식의 개체입니다.A string is an object of type String whose value is text. 내부적으로 텍스트는 Char 개체의 순차적 읽기 전용 컬렉션으로 저장됩니다.Internally, the text is stored as a sequential read-only collection of Char objects. C# 문자열의 끝에 null 종료 문자가 없으므로 C# 문자열에는 포함된 null 문자('\0')를 여러 개 사용할 수 있습니다.There is no null-terminating character at the end of a C# string; therefore a C# string can contain any number of embedded null characters ('\0'). 문자열의 Length 속성은 유니코드 문자 수가 아닌 포함된 Char 개체 수를 나타냅니다.The Length property of a string represents the number of Char objects it contains, not the number of Unicode characters. 문자열에서 개별 유니코드 코드 포인트에 액세스하려면 StringInfo 개체를 사용합니다.To access the individual Unicode code points in a string, use the StringInfo object.

문자열과 System.Stringstring vs. System.String

C#에서 string 키워드는 String의 별칭입니다.In C#, the string keyword is an alias for String. 따라서 Stringstring은 동일하며 원하는 명명 규칙을 사용할 수 있습니다.Therefore, String and string are equivalent, and you can use whichever naming convention you prefer. String 클래스는 문자열을 안전하게 작성, 조작 및 비교할 수 있도록 다양한 메서드를 제공합니다.The String class provides many methods for safely creating, manipulating, and comparing strings. 또한 C# 언어는 일반적인 문자열 작업을 간소화 하기 위해 일부 연산자를 오버로드합니다.In addition, the C# language overloads some operators to simplify common string operations. 키워드에 대한 자세한 내용은 string을 참조하세요.For more information about the keyword, see string. 형식 및 메서드에 대한 자세한 내용은 String을 참조하세요.For more information about the type and its methods, see String.

문자열 선언 및 초기화Declaring and Initializing Strings

다음 예제에서와 같이 다양한 방법으로 문자열을 선언하고 초기화할 수 있습니다.You can declare and initialize strings in various ways, as shown in the following example:

// Declare without initializing.
string message1;

// Initialize to null.
string message2 = null;

// Initialize as an empty string.
// Use the Empty constant instead of the literal "".
string message3 = System.String.Empty;

//Initialize with a regular string literal.
string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

// Initialize with a verbatim string literal.
string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

// Use System.String if you prefer.
System.String greeting = "Hello World!";

// In local variables (i.e. within a method body)
// you can use implicit typing.
var temp = "I'm still a strongly-typed System.String!";

// Use a const string to prevent 'message4' from
// being used to store another string value.
const string message4 = "You can't get rid of me!";

// Use the String constructor only when creating
// a string from a char*, char[], or sbyte*. See
// System.String documentation for details.
char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);

문자 배열이 포함된 문자열을 초기화할 경우를 제외하고는 문자열 개체를 만들기 위해 new 연산자를 사용하지 않습니다.Note that you do not use the new operator to create a string object except when initializing the string with an array of chars.

문자열 길이가 0인 새 String 개체를 만들려면 Empty 상수 값이 포함된 문자열을 초기화하세요.Initialize a string with the Empty constant value to create a new String object whose string is of zero length. 빈 문자열을 문자열 리터럴로 나타내면 ""로 표시됩니다.The string literal representation of a zero-length string is "". null 대신 Empty 값이 포함된 문자열을 초기화하면 NullReferenceException 발생을 줄일 수 있습니다.By initializing strings with the Empty value instead of null, you can reduce the chances of a NullReferenceException occurring. 액세스하기 전에 문자열의 값을 확인하려면 정적 IsNullOrEmpty(String) 메서드를 사용하세요.Use the static IsNullOrEmpty(String) method to verify the value of a string before you try to access it.

문자열 개체의 불변성Immutability of String Objects

문자열 개체는 변경할 수 없습니다. 즉, 생성된 후에는 바꿀 수 없습니다.String objects are immutable: they cannot be changed after they have been created. 실제로 문자열을 수정하는 것으로 나타나는 모든 String 메서드 및 C# 연산자는 새로운 문자열 개체에 결과를 반환합니다.All of the String methods and C# operators that appear to modify a string actually return the results in a new string object. 다음 예제에서 s1s2의 콘텐츠는 단일 문자열을 형성하도록 연결되며, 두 개의 원본 문자열은 변경되지 않습니다.In the following example, when the contents of s1 and s2 are concatenated to form a single string, the two original strings are unmodified. += 연산자는 결합된 콘텐츠를 포함하는 새 문자열을 만듭니다.The += operator creates a new string that contains the combined contents. 새 개체는 s1 변수에 할당되며, 참조를 유지하는 변수가 없으므로 s1에 할당된 원래 개체는 가비지 수집을 위해 해제됩니다.That new object is assigned to the variable s1, and the original object that was assigned to s1 is released for garbage collection because no other variable holds a reference to it.

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

// Output: A string is more than the sum of its chars.

문자열 "수정"은 실제로 새 문자열을 만드는 것이므로 문자열에 대한 참조를 만들 때 주의해야 합니다.Because a string "modification" is actually a new string creation, you must use caution when you create references to strings. 문자열에 대한 참조를 만든 후 원래 문자열을 "수정"하더라도 참조는 문자열을 수정할 때 만든 새 개체가 아니라 원래 개체를 계속 가리킵니다.If you create a reference to a string, and then "modify" the original string, the reference will continue to point to the original object instead of the new object that was created when the string was modified. 이 동작은 다음 코드에서 볼 수 있습니다.The following code illustrates this behavior:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";

//Output: Hello

원래 문자열에 대한 검색 및 바꾸기 작업과 같이, 수정을 기반으로 하는 새 문자열 작성 방법에 대한 자세한 내용은 방법: 문자열 내용 수정을 참조하세요.For more information about how to create new strings that are based on modifications such as search and replace operations on the original string, see How to: Modify String Contents.

일반 및 축자 문자열 리터럴Regular and Verbatim String Literals

다음 예제와 같이 C#에서 제공하는 이스케이프 문자를 포함해야 하는 경우 일반 문자열 리터럴을 사용합니다.Use regular string literals when you must embed escape characters provided by C#, as shown in the following example:

string columns = "Column 1\tColumn 2\tColumn 3";
//Output: Column 1        Column 2        Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";
/* Output:
  Row 1
  Row 2
  Row 3

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";
//Output: "The Æolean Harp", by Samuel Taylor Coleridge

문자열 텍스트에 백슬래시 문자가 포함된 경우 가독성을 높이고 편의를 위해 축자 문자열을 사용합니다(예: 파일 경로).Use verbatim strings for convenience and better readability when the string text contains backslash characters, for example in file paths. 축자 문자열에서는 문자열 텍스트의 일부로 줄 바꿈 문자가 유지되므로 여러 줄 문자열을 초기화하는 데 사용할 수 있습니다.Because verbatim strings preserve new line characters as part of the string text, they can be used to initialize multiline strings. 축자 문자열 내에 따옴표를 포함하려면 큰따옴표를 사용하세요.Use double quotation marks to embed a quotation mark inside a verbatim string. 다음 예제에서는 몇 가지 일반적인 축자 문자열에 대한 사용을 보여 줍니다.The following example shows some common uses for verbatim strings:

string filePath = @"C:\Users\scoleridge\Documents\";
//Output: C:\Users\scoleridge\Documents\

string text = @"My pensive SARA ! thy soft cheek reclined
    Thus on mine arm, most soothing sweet it is
    To sit beside our Cot,...";
/* Output:
My pensive SARA ! thy soft cheek reclined
   Thus on mine arm, most soothing sweet it is
   To sit beside our Cot,... 

string quote = @"Her name was ""Sara.""";
//Output: Her name was "Sara."

문자열 이스케이프 시퀀스String Escape Sequences

이스케이프 시퀀스Escape sequence 문자 이름Character name 유니코드 인코딩Unicode encoding
\'\' 작은따옴표Single quote 0x00270x0027
\"\" 큰따옴표Double quote 0x00220x0022
\\ 백슬래시Backslash 0x005C0x005C
\0\0 NullNull 0x00000x0000
\a\a 경고Alert 0x00070x0007
\b\b 백스페이스Backspace 0x00080x0008
\f\f 폼 피드Form feed 0x000C0x000C
\n\n 줄 바꿈New line 0x000A0x000A
\r\r 캐리지 리턴Carriage return 0x000D0x000D
\t\t 가로 탭Horizontal tab 0x00090x0009
\U\U 서로게이트 쌍의 경우 유니코드 이스케이프 시퀀스Unicode escape sequence for surrogate pairs. \Unnnnnnnn\Unnnnnnnn
\u\u 유니코드 이스케이프 시퀀스Unicode escape sequence \u0041 = "A"\u0041 = "A"
\v\v 세로 탭Vertical tab 0x000B0x000B
\x\x 길이가 변하는 경우를 제외하고 "\u"와 유사한 유니코드 이스케이프 시퀀스합니다.Unicode escape sequence similar to "\u" except with variable length. \x0041 또는 \x41 = "A"\x0041 or \x41 = "A"


컴파일 시 축자 문자열은 모두 동일한 이스케이프 시퀀스가 포함된 일반 문자열로 변환됩니다.At compile time, verbatim strings are converted to ordinary strings with all the same escape sequences. 따라서 디버거 조사식 창에서 축자 문자열을 확인할 경우 소스 코드의 축자 버전이 아니라 컴파일러에 의해 추가된 이스케이프 문자가 나타납니다.Therefore, if you view a verbatim string in the debugger watch window, you will see the escape characters that were added by the compiler, not the verbatim version from your source code. 예를 들어 축자 문자열 @"C:\files.txt"는 조사식 창에 "c:\\files.txt"로 나타납니다.For example, the verbatim string @"C:\files.txt" will appear in the watch window as "C:\\files.txt".

형식 문자열Format Strings

형식 문자열은 콘텐츠가 런타임에 동적으로 결정되는 문자열입니다.A format string is a string whose contents are determined dynamically at runtime. 형식 문자열은 문자열 내의 중괄호 안에 ‘보간된 식’이나 자리 표시자를 포함하여 만들어집니다.Format strings are created by embedding interpolated expressions or placeholders inside of braces within a string. 중괄호({...}) 안의 모든 내용은 런타임에 하나의 값으로 확인되고 형식화된 문자열로 출력됩니다.Everything inside the braces ({...}) will be resolved to a value and output as a formatted string at runtime. 형식 문자열을 만드는 두 가지 방법은 문자열 보간 및 복합 형식 지정입니다.There are two methods to create format strings: string interpolation and composite formatting.

문자열 보간String Interpolation

C# 6.0 이상에서 사용 가능한 ‘보간된 문자열’$ 특수 문자로 식별되고 중괄호 안에 보간된 식을 포함합니다.Available in C# 6.0 and later, interpolated strings are identified by the $ special character and include interpolated expressions in braces. 문자열 보간을 처음 접하는 경우 빠른 개요를 위해 문자열 보간 - C# 대화형 자습서를 참조하세요.If you are new to string interpolation, see the String interpolation - C# interactive tutorial for a quick overview.

코드의 가독성과 유지 관리를 개선하려면 문자열 보간을 사용합니다.Use string interpolation to improve the readability and maintainability of your code. 문자열 보간은 String.Format 메서드와 동일한 결과를 제공하지만 더 편리하고 인라인 명확성이 향상됩니다.String interpolation achieves the same results as the String.Format method, but improves ease of use and inline clarity.

var jh = (firstName: "Jupiter", lastName: "Hammon", born: 1711, published: 1761);
Console.WriteLine($"{jh.firstName} {jh.lastName} was an African American poet born in {jh.born}.");
Console.WriteLine($"He was first published in {jh.published} at the age of {jh.published - jh.born}.");
Console.WriteLine($"He'd be over {Math.Round((2018d - jh.born) / 100d) * 100d} years old today.");

// Output:
// Jupiter Hammon was an African American poet born in 1711.
// He was first published in 1761 at the age of 50.
// He'd be over 300 years old today. 

복합 형식 지정Composite Formatting

String.Format은 중괄호 안에 자리 표시자를 활용하여 형식 문자열을 만듭니다.The String.Format utilizes placeholders in braces to create a format string. 이 예제는 위에서 사용한 문자열 보간 방법과 유사한 출력을 생성합니다.This example results in similar output to the string interpolation method used above.

var pw = (firstName: "Phillis", lastName: "Wheatley", born: 1753, published: 1773);
Console.WriteLine("{0} {1} was an African American poet born in {2}.", pw.firstName, pw.lastName, pw.born);
Console.WriteLine("She was first published in {0} at the age of {1}.", pw.published, pw.published - pw.born);
Console.WriteLine("She'd be over {0} years old today.", Math.Round((2018d - pw.born) / 100d) * 100d);

// Output:
// Phillis Wheatley was an African American poet born in 1753.
// She was first published in 1773 at the age of 20.
// She'd be over 300 years old today.

.NET 형식의 서식 지정에 대한 자세한 내용은 .NET 형식의 서식 지정을 참조하세요.For more information on formatting .NET types see Formatting Types in .NET.

부분 문자열Substrings

부분 문자열은 문자열에 포함된 임의의 문자 시퀀스입니다.A substring is any sequence of characters that is contained in a string. 원래 문자열 일부에서 새 문자열을 만들려면 Substring 메서드를 사용하세요.Use the Substring method to create a new string from a part of the original string. IndexOf 메서드를 사용하면 부분 문자열 항목을 하나 이상 검색할 수 있습니다.You can search for one or more occurrences of a substring by using the IndexOf method. 지정된 부분 문자열의 모든 항목을 새 문자열로 바꾸려면 Replace 메서드를 사용하세요.Use the Replace method to replace all occurrences of a specified substring with a new string. Substring 메서드와 마찬가지로, Replace는 실제로 새 문자열을 반환하며, 원래 문자열은 수정되지 않습니다.Like the Substring method, Replace actually returns a new string and does not modify the original string. 자세한 내용은 방법: 검색 문자열방법: 문자열 내용 수정을 참조하세요.For more information, see How to: search strings and How to: Modify String Contents.

string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"

// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7

개별 문자 액세스Accessing Individual Characters

다음 예제와 같이 인덱스 값이 있는 배열 표기법을 사용하여 개별 문자에 대한 읽기 전용 액세스 권한을 얻을 수 있습니다.You can use array notation with an index value to acquire read-only access to individual characters, as in the following example:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
    System.Console.Write(s5[s5.Length - i - 1]);
// Output: "sdrawkcab gnitnirP"

문자열에서 개별 문자를 수정해야 하는 기능이 String 메서드에서 제공되지 않는 경우에는 StringBuilder 개체를 사용하여 개별 문자를 "현재 위치"에서 수정한 후 새 문자열을 만들어 StringBuilder 메서드로 결과를 저장할 수 있습니다.If the String methods do not provide the functionality that you must have to modify individual characters in a string, you can use a StringBuilder object to modify the individual chars "in-place", and then create a new string to store the results by using the StringBuilder methods. 다음 예제에서는 특정 방식으로 원래 문자열을 수정한 다음 나중에 사용할 수 있도록 결과를 저장해야 한다고 가정합니다.In the following example, assume that you must modify the original string in a particular way and then store the results for future use:

System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++)
    if (System.Char.IsLower(sb[j]) == true)
        sb[j] = System.Char.ToUpper(sb[j]);
    else if (System.Char.IsUpper(sb[j]) == true)
        sb[j] = System.Char.ToLower(sb[j]);
// Store the new string.
string corrected = sb.ToString();
// Output: How does Microsoft Word deal with the Caps Lock key?            

null 문자열 및 빈 문자열Null Strings and Empty Strings

빈 문자열은 문자가 포함되지 않은 System.String 개체의 인스턴스입니다.An empty string is an instance of a System.String object that contains zero characters. 빈 문자열은 빈 텍스트 필드를 나타내는 다양한 프로그래밍 시나리오에서 자주 사용됩니다.Empty strings are used often in various programming scenarios to represent a blank text field. 빈 문자열은 유효한 System.String 개체이므로 빈 문자열에 대해 메서드를 호출할 수 있습니다.You can call methods on empty strings because they are valid System.String objects. 빈 문자열은 다음과 같이 초기화됩니다.Empty strings are initialized as follows:

string s = String.Empty;  

반면, null 문자열은 System.String 개체의 인스턴스를 참조하지 않으므로 null 문자열에서 메서드를 호출하려고 하면 NullReferenceException이 발생합니다.By contrast, a null string does not refer to an instance of a System.String object and any attempt to call a method on a null string causes a NullReferenceException. 그러나 다른 문자열과 연결 및 비교 작업에서는 null 문자열을 사용할 수 있습니다.However, you can use null strings in concatenation and comparison operations with other strings. 다음 예제에는 null 문자열에 대한 참조로 예외가 발생하거나 발생하지 않는 몇 가지 경우가 나와 있습니다.The following examples illustrate some cases in which a reference to a null string does and does not cause an exception to be thrown:

static void Main()
    string str = "hello";
    string nullStr = null;
    string emptyStr = String.Empty;

    string tempStr = str + nullStr;
    // Output of the following line: hello

    bool b = (emptyStr == nullStr);
    // Output of the following line: False

    // The following line creates a new empty string.
    string newStr = emptyStr + nullStr;

    // Null strings and empty strings behave differently. The following
    // two lines display 0.
    // The following line raises a NullReferenceException.

    // The null character can be displayed and counted, like other chars.
    string s1 = "\x0" + "abc";
    string s2 = "abc" + "\x0";
    // Output of the following line: * abc*
    Console.WriteLine("*" + s1 + "*");
    // Output of the following line: *abc *
    Console.WriteLine("*" + s2 + "*");
    // Output of the following line: 4

빠른 문자열 생성을 위한 StringBuilder 사용Using StringBuilder for Fast String Creation

.NET에서 문자열 작업은 고도로 최적화되어 있으므로 대부분의 경우 성능에 크게 영향을 주지 않습니다.String operations in .NET are highly optimized and in most cases do not significantly impact performance. 그러나 수백 번 또는 수천 번 실행하는 타이트 루프와 같은 일부 시나리오에서는 문자열 작업이 성능에 영향을 미칠 수 있습니다.However, in some scenarios such as tight loops that are executing many hundreds or thousands of times, string operations can affect performance. 프로그램이 여러 문자열 조작을 수행하는 경우에는 StringBuilder 클래스에서 개선된 성능을 제공하는 문자열 버퍼를 만듭니다.The StringBuilder class creates a string buffer that offers better performance if your program performs many string manipulations. StringBuilder 문자열을 사용하면 개별 문자를 다시 할당할 수도 있지만 기본 제공 문자열 데이터 형식을 지원하지는 않습니다.The StringBuilder string also enables you to reassign individual characters, something the built-in string data type does not support. 예를 들어 이 코드는 새 문자열을 만들지 않고 문자열의 콘텐츠를 변경합니다.This code, for example, changes the content of a string without creating a new string:

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';

//Outputs Cat: the ideal pet

이 예제에서 StringBuilder 개체는 숫자 형식 집합에서 문자열을 만드는 데 사용됩니다.In this example, a StringBuilder object is used to create a string from a set of numeric types:

using System;
using System.Text;

namespace CSRefStrings
    class TestStringBuilder
        static void Main()
            var sb = new StringBuilder();

            // Create a string composed of numbers 0 - 9
            for (int i = 0; i < 10; i++)
            Console.WriteLine(sb);  // displays 0123456789

            // Copy one character of the string (not possible with a System.String)
            sb[0] = sb[9];

            Console.WriteLine(sb);  // displays 9123456789

문자열, 확장 메서드 및 LINQStrings, Extension Methods and LINQ

String 형식이 IEnumerable<T>을 구현하므로 문자열에서 Enumerable 클래스에 정의된 확장 메서드를 사용할 수 있습니다.Because the String type implements IEnumerable<T>, you can use the extension methods defined in the Enumerable class on strings. 시각적인 혼란을 방지하기 위해 String 형식의 경우 이러한 메서드가 IntelliSense에서 제외되지만, 제외되더라도 사용할 수는 있습니다.To avoid visual clutter, these methods are excluded from IntelliSense for the String type, but they are available nevertheless. 문자열에서 LINQLINQ 쿼리 식을 사용할 수도 있습니다.You can also use LINQLINQ query expressions on strings. 자세한 내용은 LINQ 및 문자열을 참조하세요.For more information, see LINQ and Strings.

항목Topic 설명Description
방법: 문자열 내용 수정How to: Modify String Contents 문자열을 변환하고 문자열의 내용을 수정하는 기술을 보여 줍니다.Illustrates techniques to transform strings and modify the contents of strings.
방법: 문자열 비교How to: Compare Strings 문자열의 서수 및 문화권 비교를 수행하는 방법을 보여 줍니다.Shows how to perform ordinal and culture specific comparisons of strings.
방법: 여러 문자열 연결How to: Concatenate Multiple Strings 여러 문자열을 하나로 조인하는 다양한 방법을 보여줍니다.Demonstrates various ways to join multiple strings into one.
방법: String.Split을 사용하여 문자열 구문 분석How to: Parse Strings Using String.Split String.Split 메서드를 사용하여 문자열을 구문 분석하는 방법을 보여주는 코드 예제가 포함되어 있습니다.Contains code examples that illustrate how to use the String.Split method to parse strings.
방법: 검색 문자열How to: Search Strings 문자열에서 특정 텍스트 또는 패턴에 대해 검색을 사용하는 방법을 설명합니다.Explains how to use search for specific text or patterns in strings.
방법: 문자열이 숫자 값을 나타내는지 확인How to: Determine Whether a String Represents a Numeric Value 문자열에 올바른 숫자 값이 있는지 여부를 확인할 수 있도록 문자열을 안전하게 구문 분석하는 방법을 보여 줍니다.Shows how to safely parse a string to see whether it has a valid numeric value.
문자열 보간String interpolation 문자열의 서식을 지정하는 편리한 구문을 제공하는 문자열 보간 기능에 대해 설명합니다.Describes the string interpolation feature that provides a convenient syntax to format strings.
기본적인 문자열 작업Basic String Operations System.StringSystem.Text.StringBuilder 메서드를 사용하여 기본적인 문자열 작업을 수행하는 항목에 대한 링크를 제공합니다.Provides links to topics that use System.String and System.Text.StringBuilder methods to perform basic string operations.
Parsing StringsParsing Strings .NET 기본 형식의 문자열 표현을 해당 형식의 인스턴스로 변환하는 방법에 대해 설명합니다.Describes how to convert string representations of .NET base types to instances of the corresponding types.
.NET에서 날짜 및 시간 문자열 구문 분석Parsing Date and Time Strings in .NET "01/24/2008"과 같은 문자열을 System.DateTime 개체로 변환하는 방법을 보여 줍니다.Shows how to convert a string such as "01/24/2008" to a System.DateTime object.
문자열 비교Comparing Strings 문자열을 비교하는 방법에 대한 정보가 포함되어 있으며, C# 및 Visual Basic의 예제를 제공합니다.Includes information about how to compare strings and provides examples in C# and Visual Basic.
StringBuilder 클래스 사용Using the StringBuilder Class StringBuilder 클래스를 사용하여 동적 문자열 개체를 만들고 수정하는 방법을 설명합니다.Describes how to create and modify dynamic string objects by using the StringBuilder class.
LINQ 및 문자열LINQ and Strings LINQ 쿼리를 사용하여 다양한 문자열 작업을 수행하는 방법에 대한 정보를 제공합니다.Provides information about how to perform various string operations by using LINQ queries.
C# 프로그래밍 가이드C# Programming Guide C#에서 프로그래밍 구문을 설명하는 항목에 대한 링크를 제공합니다.Provides links to topics that explain programming constructs in C#.