相关疑难解决方法(0)

什么是"特殊班级"?

在未能获得类似以下内容的编译之后:

public class Gen<T> where T : System.Array
{
}
Run Code Online (Sandbox Code Playgroud)

有错误

约束不能是特殊的类`System.Array'

我开始疑惑,究竟什么 "特殊班级"?

当人们System.Enum在泛型约束中指定时,人们似乎经常会遇到同样的错误.我得到了相同的结果System.Object,System.Delegate,System.MulticastDelegateSystem.ValueType也.

还有更多吗?我在C#中找不到关于"特殊类"的任何信息.

此外,什么如此特殊的,我们不能把它们作为一个泛型类型约束类?

c# generics class generic-constraints

113
推荐指数
7
解决办法
6505
查看次数

枚举是参考类型还是值类型?

我在我的EntityFramework 5类中使用了Enum属性,但在数据库中该字段可以为空.Visual Studio提供此属性必须是可空属性的错误.我的问题是:Enum是引用类型还是值类型?

.net enums value-type reference-type

44
推荐指数
3
解决办法
3万
查看次数

为什么受"Enum"限制的泛型类型无法在C#7.3中被认定为"结构"?

如果我有一个带有这样的struct约束的泛型接口:

public interface IStruct<T> where T : struct { }
Run Code Online (Sandbox Code Playgroud)

我可以提供枚举作为我的类型T,因为enum满足struct约束:

public class EnumIsAStruct : IStruct<DateTimeKind> { }
Run Code Online (Sandbox Code Playgroud)

C#7.3增加了一个Enum约束.以下代码以前是非法的,现在编译:

public class MCVE<T> : IStruct<T> where T : struct, Enum { }
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,以下内容无法编译:

public class MCVE<T> : IStruct<T> where T : Enum { }
Run Code Online (Sandbox Code Playgroud)

......有错误

CS0453类型'T'必须是非可空值类型才能在泛型类型或方法'IStruct'中将其用作参数'T'

为什么是这样?我希望受限制的泛型类型Enum可用作类型参数,其中类型受约束struct但似乎不是这种情况 - 我必须将Enum约束更改为struct, Enum.我的期望是错的吗?

.net c# generics enums c#-7.3

11
推荐指数
1
解决办法
572
查看次数

C#7.3处理通用枚举约束中的可能错误

即使以下代码支持受约束为枚举的泛型,也无法在C#7.3中编译:

using System;
public class Test<T> where T: Enum
{
    public void Method()
    {
        if (!Enum.TryParse<T>("something", out var value))
            throw new Exception("Oops");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的其他使用Enum约束的代码都可以正常工作,因此我拥有所有版本的正确版本,似乎似乎无法调用也被限制为an的另一个方法Enum

这是一个错误还是我误解了它应该如何工作。

c# generics enums constraints c#-7.3

3
推荐指数
1
解决办法
82
查看次数