From 7a7b74340cc05f1ebb09a952f900571bf83b6171 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 1 Dec 2016 14:31:33 -0500 Subject: [PATCH 1/5] remove 'wrench' articles that have been ported Several not-yet-written articles have been covered by the port of the C# content from MSDN. These still need to be reviewed and updated, but they are all now present. --- docs/csharp/generics.md | 27 ------------------------ docs/csharp/interfaces.md | 27 ------------------------ docs/csharp/interop.md | 27 ------------------------ docs/csharp/namespaces-and-assemblies.md | 27 ------------------------ docs/csharp/type-system.md | 27 ------------------------ docs/toc.md | 10 ++++----- 6 files changed, 5 insertions(+), 140 deletions(-) delete mode 100644 docs/csharp/generics.md delete mode 100644 docs/csharp/interfaces.md delete mode 100644 docs/csharp/interop.md delete mode 100644 docs/csharp/namespaces-and-assemblies.md delete mode 100644 docs/csharp/type-system.md diff --git a/docs/csharp/generics.md b/docs/csharp/generics.md deleted file mode 100644 index fa329016a506e..0000000000000 --- a/docs/csharp/generics.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Generics -description: Generics -keywords: .NET, .NET Core -author: dotnet-bot -manager: wpickett -ms.date: 06/20/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: dotnet -ms.assetid: 63d1fe21-bb1f-46e3-92a0-89efcf0815e8 ---- - -# 🔧 Generics - -> **Note** -> -> This topic hasn’t been written yet! -> -> We welcome your input to help shape the scope and approach. You can track the status and provide input on this -> [issue](https://github.com/dotnet/docs/issues/489) at GitHub. -> -> If you would like to review early drafts and outlines of this topic, please leave a note with your contact information in the issue. -> -> Learn more about how you can contribute on [GitHub](https://github.com/dotnet/docs/blob/master/CONTRIBUTING.md). -> diff --git a/docs/csharp/interfaces.md b/docs/csharp/interfaces.md deleted file mode 100644 index ecc5d054036f6..0000000000000 --- a/docs/csharp/interfaces.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Interfaces | C# Guide -description: Learn about creating and using interfaces in C# -keywords: .NET, .NET Core, C# -author: dotnet-bot -manager: wpickett -ms.date: 06/25/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: csharp -ms.assetid: be9a19c8-642c-48be-b481-2dab7d216fad ---- - -# 🔧 Interfaces - -> **Note** -> -> This topic hasn’t been written yet! -> -> We welcome your input to help shape the scope and approach. You can track the status and provide input on this -> [issue](https://github.com/dotnet/docs/issues/967) at GitHub. -> -> If you would like to review early drafts and outlines of this topic, please leave a note with your contact information in the issue. -> -> Learn more about how you can contribute on [GitHub](https://github.com/dotnet/docs/blob/master/CONTRIBUTING.md). -> diff --git a/docs/csharp/interop.md b/docs/csharp/interop.md deleted file mode 100644 index 872ef4c26a7b8..0000000000000 --- a/docs/csharp/interop.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Native interoperability -description: Native interoperability -keywords: .NET, .NET Core -author: dotnet-bot -manager: wpickett -ms.date: 06/20/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: dotnet -ms.assetid: 54485caa-09e0-466c-86fa-6a9aab6c332b ---- - -# 🔧 Native interoperability - -> **Note** -> -> This topic hasn’t been written yet! -> -> We welcome your input to help shape the scope and approach. You can track the status and provide input on this -> [issue](https://github.com/dotnet/docs/issues/492) at GitHub. -> -> If you would like to review early drafts and outlines of this topic, please leave a note with your contact information in the issue. -> -> Learn more about how you can contribute on [GitHub](https://github.com/dotnet/docs/blob/master/CONTRIBUTING.md). -> diff --git a/docs/csharp/namespaces-and-assemblies.md b/docs/csharp/namespaces-and-assemblies.md deleted file mode 100644 index ef0e92ea073d0..0000000000000 --- a/docs/csharp/namespaces-and-assemblies.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Namespaces and Assemblies | C# Guide -description: Namespaces and Assemblies are the fundamental organizing features for C# -keywords: .NET, .NET Core, C# -author: dotnet-bot -manager: wpickett -ms.date: 06/25/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: csharp -ms.assetid: fe436e2b-c6ea-490d-a221-0d822c6e178b ---- - -# 🔧 Namespaces and Assemblies - -> **Note** -> -> This topic hasn’t been written yet! -> -> We welcome your input to help shape the scope and approach. You can track the status and provide input on this -> [issue](https://github.com/dotnet/docs/issues/962) at GitHub. -> -> If you would like to review early drafts and outlines of this topic, please leave a note with your contact information in the issue. -> -> Learn more about how you can contribute on [GitHub](https://github.com/dotnet/docs/blob/master/CONTRIBUTING.md). -> diff --git a/docs/csharp/type-system.md b/docs/csharp/type-system.md deleted file mode 100644 index bc12259adb056..0000000000000 --- a/docs/csharp/type-system.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: C# Type system -description: C# Type system -keywords: .NET, .NET Core -author: dotnet-bot -manager: wpickett -ms.date: 06/20/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: dotnet -ms.assetid: 08589912-2fa0-4636-9aa6-d8b2b83cdf88 ---- - -# 🔧 C# Type system - -> **Note** -> -> This topic hasn’t been written yet! -> -> We welcome your input to help shape the scope and approach. You can track the status and provide input on this -> [issue](https://github.com/dotnet/docs/issues/487) at GitHub. -> -> If you would like to review early drafts and outlines of this topic, please leave a note with your contact information in the issue. -> -> Learn more about how you can contribute on [GitHub](https://github.com/dotnet/docs/blob/master/CONTRIBUTING.md). -> diff --git a/docs/toc.md b/docs/toc.md index cc0120119d055..f55f18ba422bf 100644 --- a/docs/toc.md +++ b/docs/toc.md @@ -253,19 +253,19 @@ ### [🔧 Using C# Interactive from Powershell](csharp/interactive-with-powershell.md) ### [🔧 Using C# Interactive from macOS or Linux Terminal](csharp/interactive-with-bash.md) ## [C# Concepts](csharp/concepts.md) -### [🔧 C# Type system](csharp/type-system.md) -### [🔧 Namespaces and Assemblies](csharp/namespaces-and-assemblies.md) +### [C# Type system](csharp/programming-guide/types/index.md) +### [Namespaces](csharp/programming-guide/namespaces/index.md) ### [Basic Types](csharp/basic-types.md) ### [Classes](csharp/classes.md) ### [Structs](csharp/structs.md) ### [Tuples](csharp/tuples.md) -### [🔧 Interfaces](csharp/interfaces.md) +### [Interfaces](csharp/programming-guide/interfaces/index.md) ### [Methods and Lambda Expressions](csharp/methods-lambda-expressions.md) #### [Methods](csharp/methods.md) #### [🔧 Lambda Expressions](csharp/lambda-expressions.md) ### [Properties](csharp/properties.md) ### [Indexers](csharp/indexers.md) -### [🔧 Generics](csharp/generics.md) +### [Generics](csharp/programming-guide/generics.index.md) ### [Iterators](csharp/iterators.md) ### [Delegates & events](csharp/delegates-events.md) #### [Introduction to Delegates](csharp/delegates-overview.md) @@ -288,7 +288,7 @@ #### [Building Expressions](csharp/expression-trees-building.md) #### [Translating Expressions](csharp/expression-trees-translating.md) #### [Summary](csharp/expression-trees-summary.md) -### [🔧 Native interoperability](csharp/interop.md) +### [Native interoperability](csharp/programming-guide/interop/interoperability.md) ### [🔧 Reflection & code generation](csharp/reflection.md) ### [Documenting your code](csharp/codedoc.md) ## [🔧 Using the .NET Compiler Platform](csharp/roslyn/index.md) From c53e82363a483c5c65dde919924c84b38f1294c9 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 1 Dec 2016 16:08:19 -0500 Subject: [PATCH 2/5] configure redirects for deprecated articles. --- docs/csharp/generics.md | 14 ++++++++++++++ docs/csharp/interfaces.md | 14 ++++++++++++++ docs/csharp/interop.md | 14 ++++++++++++++ docs/csharp/namespaces-and-assemblies.md | 14 ++++++++++++++ docs/csharp/type-system.md | 14 ++++++++++++++ docs/toc.md | 2 +- 6 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 docs/csharp/generics.md create mode 100644 docs/csharp/interfaces.md create mode 100644 docs/csharp/interop.md create mode 100644 docs/csharp/namespaces-and-assemblies.md create mode 100644 docs/csharp/type-system.md diff --git a/docs/csharp/generics.md b/docs/csharp/generics.md new file mode 100644 index 0000000000000..b8794969ddfc9 --- /dev/null +++ b/docs/csharp/generics.md @@ -0,0 +1,14 @@ +--- +title: Generics +description: Generics +keywords: .NET, .NET Core +author: dotnet-bot +manager: wpickett +ms.date: 12/01/2016 +ms.topic: article +ms.prod: .net-core +ms.technology: .net-core-technologies +ms.devlang: dotnet +ms.assetid: 63d1fe21-bb1f-46e3-92a0-89efcf0815e8 +redirect_url: /csharp/programming-guide/generics/index.md +--- diff --git a/docs/csharp/interfaces.md b/docs/csharp/interfaces.md new file mode 100644 index 0000000000000..2ccd2288ae432 --- /dev/null +++ b/docs/csharp/interfaces.md @@ -0,0 +1,14 @@ +--- +title: Interfaces | C# Guide +description: Learn about creating and using interfaces in C# +keywords: .NET, .NET Core, C# +author: dotnet-bot +manager: wpickett +ms.date: 12/01/2016 +ms.topic: article +ms.prod: .net-core +ms.technology: .net-core-technologies +ms.devlang: csharp +ms.assetid: be9a19c8-642c-48be-b481-2dab7d216fad +redirect_url: /csharp/programming-guide/interfaces/index.md +--- diff --git a/docs/csharp/interop.md b/docs/csharp/interop.md new file mode 100644 index 0000000000000..11527f594b8c6 --- /dev/null +++ b/docs/csharp/interop.md @@ -0,0 +1,14 @@ +--- +title: Native interoperability +description: Native interoperability +keywords: .NET, .NET Core +author: dotnet-bot +manager: wpickett +ms.date: 12/01/2016 +ms.topic: article +ms.prod: .net-core +ms.technology: .net-core-technologies +ms.devlang: dotnet +ms.assetid: 54485caa-09e0-466c-86fa-6a9aab6c332b +redirect_url: /csharp/programming-guide/interop/interoperability.md +--- diff --git a/docs/csharp/namespaces-and-assemblies.md b/docs/csharp/namespaces-and-assemblies.md new file mode 100644 index 0000000000000..11d6594b424ea --- /dev/null +++ b/docs/csharp/namespaces-and-assemblies.md @@ -0,0 +1,14 @@ +--- +title: Namespaces and Assemblies | C# Guide +description: Namespaces and Assemblies are the fundamental organizing features for C# +keywords: .NET, .NET Core, C# +author: dotnet-bot +manager: wpickett +ms.date: 12/01/2016 +ms.topic: article +ms.prod: .net-core +ms.technology: .net-core-technologies +ms.devlang: csharp +ms.assetid: fe436e2b-c6ea-490d-a221-0d822c6e178b +redirect_url: /csharp/programming-guide/namespaces/index.md +--- diff --git a/docs/csharp/type-system.md b/docs/csharp/type-system.md new file mode 100644 index 0000000000000..cc20e5287c048 --- /dev/null +++ b/docs/csharp/type-system.md @@ -0,0 +1,14 @@ +--- +title: C# Type system +description: C# Type system +keywords: .NET, .NET Core +author: dotnet-bot +manager: wpickett +ms.date: 12/01/2016 +ms.topic: article +ms.prod: .net-core +ms.technology: .net-core-technologies +ms.devlang: dotnet +ms.assetid: 08589912-2fa0-4636-9aa6-d8b2b83cdf88 +redirect_url: /csharp/programming-guide/types/index.md +--- diff --git a/docs/toc.md b/docs/toc.md index f55f18ba422bf..01958780cf04c 100644 --- a/docs/toc.md +++ b/docs/toc.md @@ -265,7 +265,7 @@ #### [🔧 Lambda Expressions](csharp/lambda-expressions.md) ### [Properties](csharp/properties.md) ### [Indexers](csharp/indexers.md) -### [Generics](csharp/programming-guide/generics.index.md) +### [Generics](csharp/programming-guide/generics/index.md) ### [Iterators](csharp/iterators.md) ### [Delegates & events](csharp/delegates-events.md) #### [Introduction to Delegates](csharp/delegates-overview.md) From 00069de929ceb5e92dad91b24f25f510a7e2fec7 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 1 Dec 2016 16:27:57 -0500 Subject: [PATCH 3/5] don't include the file extension on redirects. --- docs/csharp/generics.md | 2 +- docs/csharp/interfaces.md | 2 +- docs/csharp/interop.md | 2 +- docs/csharp/namespaces-and-assemblies.md | 2 +- docs/csharp/type-system.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/csharp/generics.md b/docs/csharp/generics.md index b8794969ddfc9..c05909c8443c9 100644 --- a/docs/csharp/generics.md +++ b/docs/csharp/generics.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 63d1fe21-bb1f-46e3-92a0-89efcf0815e8 -redirect_url: /csharp/programming-guide/generics/index.md +redirect_url: /csharp/programming-guide/generics/index --- diff --git a/docs/csharp/interfaces.md b/docs/csharp/interfaces.md index 2ccd2288ae432..7c4be35718c8e 100644 --- a/docs/csharp/interfaces.md +++ b/docs/csharp/interfaces.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: csharp ms.assetid: be9a19c8-642c-48be-b481-2dab7d216fad -redirect_url: /csharp/programming-guide/interfaces/index.md +redirect_url: /csharp/programming-guide/interfaces/index --- diff --git a/docs/csharp/interop.md b/docs/csharp/interop.md index 11527f594b8c6..5a536f5d31f76 100644 --- a/docs/csharp/interop.md +++ b/docs/csharp/interop.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 54485caa-09e0-466c-86fa-6a9aab6c332b -redirect_url: /csharp/programming-guide/interop/interoperability.md +redirect_url: /csharp/programming-guide/interop/interoperability --- diff --git a/docs/csharp/namespaces-and-assemblies.md b/docs/csharp/namespaces-and-assemblies.md index 11d6594b424ea..09445b60a1da2 100644 --- a/docs/csharp/namespaces-and-assemblies.md +++ b/docs/csharp/namespaces-and-assemblies.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: csharp ms.assetid: fe436e2b-c6ea-490d-a221-0d822c6e178b -redirect_url: /csharp/programming-guide/namespaces/index.md +redirect_url: /csharp/programming-guide/namespaces/index --- diff --git a/docs/csharp/type-system.md b/docs/csharp/type-system.md index cc20e5287c048..3ed149109254d 100644 --- a/docs/csharp/type-system.md +++ b/docs/csharp/type-system.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 08589912-2fa0-4636-9aa6-d8b2b83cdf88 -redirect_url: /csharp/programming-guide/types/index.md +redirect_url: /csharp/programming-guide/types/index --- From 8d54aa8999bf2268c108fd2d1bc197b646f0cae2 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 1 Dec 2016 16:45:27 -0500 Subject: [PATCH 4/5] update the path for redirection --- docs/csharp/generics.md | 2 +- docs/csharp/interfaces.md | 2 +- docs/csharp/interop.md | 2 +- docs/csharp/namespaces-and-assemblies.md | 2 +- docs/csharp/type-system.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/csharp/generics.md b/docs/csharp/generics.md index c05909c8443c9..e3d3c27fdc2da 100644 --- a/docs/csharp/generics.md +++ b/docs/csharp/generics.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 63d1fe21-bb1f-46e3-92a0-89efcf0815e8 -redirect_url: /csharp/programming-guide/generics/index +redirect_url: /dotnet/articles/csharp/programming-guide/generics/index --- diff --git a/docs/csharp/interfaces.md b/docs/csharp/interfaces.md index 7c4be35718c8e..e8aa61b847e5b 100644 --- a/docs/csharp/interfaces.md +++ b/docs/csharp/interfaces.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: csharp ms.assetid: be9a19c8-642c-48be-b481-2dab7d216fad -redirect_url: /csharp/programming-guide/interfaces/index +redirect_url: /dotnet/articles/csharp/programming-guide/interfaces/index --- diff --git a/docs/csharp/interop.md b/docs/csharp/interop.md index 5a536f5d31f76..fe26bada06e61 100644 --- a/docs/csharp/interop.md +++ b/docs/csharp/interop.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 54485caa-09e0-466c-86fa-6a9aab6c332b -redirect_url: /csharp/programming-guide/interop/interoperability +redirect_url: /dotnet/articles/csharp/programming-guide/interop/interoperability --- diff --git a/docs/csharp/namespaces-and-assemblies.md b/docs/csharp/namespaces-and-assemblies.md index 09445b60a1da2..c591d1c024ae0 100644 --- a/docs/csharp/namespaces-and-assemblies.md +++ b/docs/csharp/namespaces-and-assemblies.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: csharp ms.assetid: fe436e2b-c6ea-490d-a221-0d822c6e178b -redirect_url: /csharp/programming-guide/namespaces/index +redirect_url: /dotnet/articles/csharp/programming-guide/namespaces/index --- diff --git a/docs/csharp/type-system.md b/docs/csharp/type-system.md index 3ed149109254d..27e8550980300 100644 --- a/docs/csharp/type-system.md +++ b/docs/csharp/type-system.md @@ -10,5 +10,5 @@ ms.prod: .net-core ms.technology: .net-core-technologies ms.devlang: dotnet ms.assetid: 08589912-2fa0-4636-9aa6-d8b2b83cdf88 -redirect_url: /csharp/programming-guide/types/index +redirect_url: /dotnet/articles/csharp/programming-guide/types/index --- From 3309c09342e8678717fb0591c9ee775b69ef0858 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 1 Dec 2016 20:41:08 -0500 Subject: [PATCH 5/5] find and replace links to content that moved. --- docs/csharp/basic-types.md | 2 +- docs/csharp/classes.md | 2 +- docs/csharp/delegates-strongly-typed.md | 2 +- docs/csharp/iterators.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/csharp/basic-types.md b/docs/csharp/basic-types.md index 37eb0d2820fdd..240a970adf8d9 100644 --- a/docs/csharp/basic-types.md +++ b/docs/csharp/basic-types.md @@ -62,7 +62,7 @@ A type can be declared with one or more *type parameters* that serve as a placeh [!code-csharp[Generic types](../../samples/snippets/csharp/concepts/basic-types/generic-type.cs)] -The use of the type parameter makes it possible to reuse the same class to hold any type of element, without having to convert each element to [object](https://msdn.microsoft.com/library/9kkx3h3c.aspx). Generic collection classes are called *strongly-typed collections* because the compiler knows the specific type of the collection's elements and can raise an error at compile-time if, for example, you try to add an integer to the `strings` object in the previous example. For more information, see [Generics](generics.md). +The use of the type parameter makes it possible to reuse the same class to hold any type of element, without having to convert each element to [object](https://msdn.microsoft.com/library/9kkx3h3c.aspx). Generic collection classes are called *strongly-typed collections* because the compiler knows the specific type of the collection's elements and can raise an error at compile-time if, for example, you try to add an integer to the `strings` object in the previous example. For more information, see [Generics](programming-guide/generics/index.md). ## Implicit types, anonymous types, and tuple types As stated previously, you can implicitly type a local variable (but not class members) by using the [var](https://msdn.microsoft.com/library/bb383973.aspx) keyword. The variable still receives a type at compile time, but the type is provided by the compiler. For more information, see [Implicitly typed local variables](https://msdn.microsoft.com/library/bb384061.aspx). diff --git a/docs/csharp/classes.md b/docs/csharp/classes.md index 8f92783a2e499..f899cdaca5951 100644 --- a/docs/csharp/classes.md +++ b/docs/csharp/classes.md @@ -55,7 +55,7 @@ Inheritance is accomplished by using a *derivation*, which means a class is decl When a class declares a base class, it inherits all the members of the base class except the constructors. -Unlike C++, a class in C# can only directly inherit from one base class. However, because a base class may itself inherit from another class, a class may indirectly inherit multiple base classes. Furthermore, a class can directly implement more than one interface. For more information, see [Interfaces](interfaces.md). +Unlike C++, a class in C# can only directly inherit from one base class. However, because a base class may itself inherit from another class, a class may indirectly inherit multiple base classes. Furthermore, a class can directly implement more than one interface. For more information, see [Interfaces](programming-guide/interfaces/index.md). A class can be declared [abstract](https://msdn.microsoft.com/library/sf985hc5.aspx). An abstract class contains abstract methods that have a signature definition but no implementation. Abstract classes cannot be instantiated. They can only be used through derived classes that implement the abstract methods. By contrast, a [sealed](https://msdn.microsoft.com/library/88c54tsw.aspx) class does not allow other classes to derive from it. For more information, see [Abstract and sealed classes and class members](https://msdn.microsoft.com/library/ms173150.aspx). diff --git a/docs/csharp/delegates-strongly-typed.md b/docs/csharp/delegates-strongly-typed.md index 6ac0d28f7532f..4d7ed2a5bf115 100644 --- a/docs/csharp/delegates-strongly-typed.md +++ b/docs/csharp/delegates-strongly-typed.md @@ -31,7 +31,7 @@ after a time. Every new feature requires new delegate types. Thankfully, this isn't necessary. The .NET Core framework contains several types that you can reuse whenever you need delegate types. These are -[generic](generics.md) definitions so you can declare customizations +[generic](programming-guide/generics/index.md) definitions so you can declare customizations when you need new method declarations. The first of these types is the @System.Action type, and several variations: diff --git a/docs/csharp/iterators.md b/docs/csharp/iterators.md index 4064e3611b3ff..ad6567a8dc91b 100644 --- a/docs/csharp/iterators.md +++ b/docs/csharp/iterators.md @@ -51,7 +51,7 @@ to generate the code necessary to iterate a collection: `IEnumerable` and `IEnumerator`. This mechanism is explained in more detail below. Both of these interfaces also have non-generic counterparts: `IEnumerable` and -`IEnumerator`. The [generic](generics.md) versions are preferred for modern code. +`IEnumerator`. The [generic](programming-guide/generics/index.md) versions are preferred for modern code. ## Enumeration sources with iterator methods