Question: I'm currently learning C# and was wondering if C# has an *equivalent* to `chr` and `ord`.

Answer: 
In **C#**, `char` is efficiently `UInt16`; that's why we can simply *cast*:

**chr:** `(char)` *explicit* cast (if `i` is out of `[0..UInt16.MaxValue]` range we'll have integer overflow)

```
 int i = ...
 char c = (char) i; 

```

**ord:** either `(int)` or even *implicit* cast (cast from `char` to `int` is always possible)

```
 char c = ...
 int i = c;

```
In Python 3, the strings work in terms of Unicode code points, whereas in C# the `char` is a UTF-16 code unit so if you cast between `int` and `char` you won't be able to handle characters outside the Basic Multilingual Plane.

If handling non-BMP code points matters to you, the equivalent of `chr` would be [`char.ConvertFromUtf32(int)`](https://learn.microsoft.com/en-us/dotnet/api/system.char.convertfromutf32?view=netcore-2.2) - this returns a `string` as non-BMP characters will end up being represented as two UTF-16 code units.

The equivalent of `ord` would be [`char.ConvertToUtf32(string, int)`](https://learn.microsoft.com/en-us/dotnet/api/system.char.converttoutf32?view=netcore-2.2) which would allow you to find the code point at the given index in a string, taking account of whether or not it is made up of two UTF-16 code units. In contrast, if you have a `char` then the best you can do is a cast.