SpanとかMemoryとかIntPtrとかArrayの変換方法チートシート

自分用のチートシートです。
[MSDNマガジン](https://msdn.microsoft.com/en-us/magazine/mt814808.aspx?f=255&MSPPError=-2147217396)をベースに

| 変換元                                 | 変換先                                       | メソッド                                                                              | Copied |
| -------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------- | ------ |
| `ArraySegment<T>`                      | `Memory<T>`                                  | 暗黙のキャスト、<br>`AsMemory()`                                                      |        |
| `ArraySegment<T>`                      | `ReadOnlyMemory<T>`                          | 暗黙のキャスト、<br>`AsReadOnlyMemory()`                                              |        |
| `ArraySegment<T>`                      | `ReadOnlySpan<T>`                            | 暗黙のキャスト、<br>`AsReadOnlySpan()`                                                |        |
| `ArraySegment<T>`                      | `Span<T>`                                    | 暗黙のキャスト、<br>`AsSpan()`                                                        |        |
| `ArraySegment<T>`                      | `T[]`                                        | `Array`プロパティ                                                                     |        |
| `IntPtr`                               | `String`                                     | `Marshal.PtrToString{Uni,Auto,Ansi}()`                                                | *      |
| `IntPtr`                               | `T`                                          | `Marshal.PtrToStructure()`                                                            | *      |
| `IntPtr`                               | `T*`                                         | キャスト                                                                              |        |
| `IntPtr`                               | `void*`                                      | `ToPointer()`                                                                         |        |
| `IntPtr`                               | `Span<T>`                                    | なし([無理やり変換する方法](https://qiita.com/kenichiuda/items/c861e7851426cbcee3bb)) |        |
| `Memory<T>`                            | `ArraySegment<T>`                            | `SRIS.MemoryMarshal.TryGetArray()`                                                    |        |
| `Memory<T>`                            | `ReadOnlyMemory<T>`                          | 暗黙のキャスト                                                                        |        |
| `Memory<T>`                            | `Span<T>`                                    | `Span`プロパティ                                                                      |        |
| `Memory<T>`                            | `T[]`                                        | `ToArray()`                                                                           | *      |
| `ReadOnlyMemory<char>`                 | `string`                                     | `ToString()`                                                                          | *      |
| `ReadOnlyMemory<char>`                 | `素のstring`                                 | `SRIS.MemoryMarshal.TryGetString()`                                                   |        |
| `ReadOnlyMemory<T>`                    | `ArraySegment<T>`                            | `SRIS.MemoryMarshal.TryGetArray()`                                                    |        |
| `ReadOnlyMemory<T>`                    | `IEnumerable<T>`                             | `SRIS.MemoryMarshal.ToEnumerable()`                                                   |        |
| `ReadOnlyMemory<T>`                    | `Memory<T>`                                  | `SRIS.MemoryMarshal.AsMemory()`                                                       |        |
| `ReadOnlyMemory<T>`                    | `ReadOnlySpan<T>`                            | `Span`プロパティ                                                                      |        |
| `ReadOnlyMemory<T>`                    | `T[]`                                        | `ToArray()`                                                                           | *      |
| `ReadOnlyMemory<T>`                    | `TManager : System.Buffers.MemoryManager<T>` | `SRIS.MemoryMarshal.TryGetMemoryManager()`                                            |        |
| `ReadOnlySpan<T>`                      | `string`                                     | `ToString()`                                                                          | *      |
| `ReadOnlySpan<T>`                      | `T*`                                         | `fixed`ステートメント                                                                 |        |
| `ReadOnlySpan<T>`                      | `ref readonly T`                             | インデクサー取得アクセサー、<br>`SRIS.MemoryMarshal.GetReference()`                   |        |
| `ReadOnlySpan<T> where T : struct`     | `ReadOnlySpan<byte>`                         | `SRIS.MemoryMarshal.AsBytes()`                                                        |        |
| `ReadOnlySpan<TFrom> where T : struct` | `ReadOnlySpan<TTo> where T : struct`         | `SRIS.MemoryMarshal.Cast()`                                                           |        |
| `ref byte`                             | `T`                                          | `SRCS.Unsafe.Read()`                                                                  | *      |
| `ref T`                                | `ReadOnlySpan<T>`                            | `SRIS.MemoryMarshal.CreateReadOnlySpan()`                                             |        |
| `ref T`                                | `Span<T>`                                    | `SRIS.MemoryMarshal.CreateSpan`メソッド`                                              |        |
| `ref T`                                | `void*`                                      | `SRCS.Unsafe.AsPointer()`                                                             |        |
| `ref TFrom`                            | `ref TTo`                                    | `SRCS.Unsafe.As()`                                                                    |        |
| `ref T where T : struct`               | `Span<byte>`                                 | `SRIS.MemoryMarshal.TryWrite`メソッド、<br>`SRIS.MemoryMarshal.Write()`               |        |
| `Span<byte>`                           | `ref T where T : struct`                     | `SRIS.MemoryMarshal.AsRef()`                                                          |        |
| `Span<byte>`                           | `T where T : struct`                         | `SRIS.MemoryMarshal.TryRead`メソッド、<br>`SRIS.MemoryMarshal.Read()`                 | *      |
| `Span<char>`                           | `string`                                     | `ToString()`                                                                          | *      |
| `Span<T>`                              | `T*`                                         | `fixed`ステートメント                                                                 |        |
| `Span<T>`                              | `ReadOnlySpan<T>`                            | 暗黙のキャスト                                                |        |
| `Span<T>`                              | `ref T`                                      | `ref span[0]`、<br>`GetPinnableReference()`、<br>`SRIS.MemoryMarshal.GetReference()`  |        |
| `Span<T> where T : struct`             | `Span<byte>`                                 | `SRIS.MemoryMarshal.AsBytes()`                                                        |        |
| `Span<TFrom> where T : struct`         | `Span<TTo> where T : struct`                 | `SRIS.MemoryMarshal.Cast()`                                                           |        |
| `String`                               | `char*`                                      | `fixed`ステートメント                                                                 |        |
| `String`                               | `ReadOnlyMemory<char>`                       | `AsReadOnlyMemory()`                                                                  |        |
| `String`                               | `ReadOnlySpan<char>`                         | 暗黙のキャスト、`AsSpan()`                                                            |        |
| `String(Pinned)`                       | `IntPtr`                                     | `GCHandle.AddrOfPinnedObject()`                                                       |        |
| `T[]`                                  | `ArraySegment<T>`                            | ctor、暗黙のキャスト                                                                  |        |
| `T[]`                                  | `Memory<T>`                                  | ctor、暗黙のキャスト、<br>`AsMemory()`                                                | *      |
| `T[]`                                  | `ReadOnlyMemory<T>`                          | ctor、暗黙のキャスト、<br>`AsReadOnlyMemory()`                                        |        |
| `T[]`                                  | `ReadOnlySpan<T>`                            | ctor、暗黙のキャスト、<br>`AsReadOnlySpan()`                                          |        |
| `T[]`                                  | `Span<T>`                                    | ctor、暗黙のキャスト、<br>`AsSpan()`                                                  |        |
| `T[]`(Pinned)                          | `IntPtr`                                     | `Marshal.UnsafeAddrOfPinnedArrayElement()`、<br>`GCHandle.AddrOfPinnedObject()`       | *      |
| `T[]`(Pinned)                          | `Memory<T>`                                  | `SRIS.MemoryMarshal.CreateFromPinnedArray()`                                          |        |
| `void*`                                | `IntPtr`                                     | ctor                                                                                  |        |
| `void*`                                | `ReadOnlySpan<T>`                            | ctor                                                                                  | *      |
| `void*`                                | `ref T`                                      | `SRCS.Unsafe.AsRefメソッド`                                                           |        |
| `void*`                                | `Span<T>`                                    | ctor                                                                                  |        |

SRIS: System.Runtime.InteropServices
SRCS: System.Runtime.CompilerServices