Repository navigation
CSharp Keyword unmanaged generic type constraint
Codex edited this page Oct 11, 2026
·
2 revisions
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Довідник C# · Практичне керівництво
Обмеження where T : unmanaged дозволяє лише типи значень без керованих посилань у їхньому складі. Воно дає змогу використовувати sizeof(T) та T* у дозволеному unsafe-контексті. Це обмеження типу, а не угода виклику функції. Його не поєднують з окремими struct або new().
Збережіть цей приклад окремо як Example.cs. Запускайте його незалежно від інших прикладів на сторінці.
Example.cs:
// PROJECT-EXAMPLE
int Size<T>() where T : unmanaged
{
unsafe { return sizeof(T); }
}
System.Console.WriteLine(Size<int>());Результат:
4
static int ByteSize<T>() where T : unmanaged;
static void Swap<T>(T* left, T* right) where T : unmanaged;Файл Example.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
</Project>Файл Program.cs:
using System;
public struct GridPoint { public int X; public int Y; }
internal static unsafe class Program
{
public static void Main()
{
Console.WriteLine(ByteSize<int>());
Console.WriteLine(ByteSize<GridPoint>());
}
private static int ByteSize<T>() where T : unmanaged => sizeof(T);
}Результат:
4
8
Файл Example.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
</Project>Файл Program.cs:
using System;
internal static unsafe class Program
{
public static void Main()
{
int left = 10;
int right = 25;
Swap(&left, &right);
Console.WriteLine($"{left},{right}");
}
private static void Swap<T>(T* left, T* right) where T : unmanaged
{
T temporary = *left;
*left = *right;
*right = temporary;
}
}Результат:
25,10
Офіційне джерело: Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE