小编Hr.*_*ahi的帖子

具有可为 null 类型的 C# notnull 约束会出现意外行为

我读过有关notnullC# 中的约束的内容,其中写道“这允许值类型或不可为空的引用类型,但不允许可为空的引用类型。” (引用自《Programming C# - 10.0 By Ian Griffiths》)

我尝试在下面的代码中检查这个约束:

MyTestClass<int?> instance1 = new MyTestClass<int?>();
MyTestClass<string?> instance2 = new MyTestClass<string?>();

public class MyTestClass<T> where T : notnull
{
    T Value { get; set; }

    public MyTestClass()
    {
        Value = default(T);
        if (Value == null)
            Console.WriteLine($"Type of T is {typeof(T)} and its default value is 'Null'");
        else
            Console.WriteLine($"Type of T is {typeof(T)} and its default value is {Value}");
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用可为空类型int?(可为空值类型)和string?(可为空引用类型)实例化了我的泛型类,它仍然适用于我。

它还为我打印这样的输出:

Type of T …
Run Code Online (Sandbox Code Playgroud)

c# constraints

15
推荐指数
2
解决办法
517
查看次数

C# 中的“非托管”约束是否与非托管资源和垃圾收集器相关?

我一直在研究unmanagedC#中的约束,它在我脑海中提出了一个问题:unmanaged约束是否与“非托管资源”和垃圾收集器的管理有关?

根据 Microsoft 关于 .NET 垃圾收集器的文档,它指出:

  • “对于应用程序创建的大多数对象,您可以依靠 .NET 垃圾收集器来处理内存管理。但是,当您创建包含非托管资源的对象时,您必须在使用完这些资源后显式释放这些资源。” 清理非托管资源- .NET | 微软学习

有人可以澄清“非托管”约束与垃圾收集器对非托管资源的管理之间是否有直接关系吗?

.net c# computer-science garbage-collection unmanaged

5
推荐指数
0
解决办法
200
查看次数