CS8121:自定义<t>无法通过“T”类型的模式处理

时间:2018-01-05 14:13:30

标签: c# nullable c#-7.0

考虑以下代码:

struct Custom<T> where T : struct { }
//...
Nullable<int> x = 2;
if(x is int z) { } //compiles
Custom<int> a = 2;
if(a is int b) { } //CS8121 An expression of type 'Custom<int>' cannot be handled by a pattern of type 'int'.

Nullable<T>处理T模式的原因是什么?我可以为我的自定义结构做同样的事情吗?我已经尝试过转换运算符,但没有运气。但不确定我是否尝试过所有可能的操作员。

1 个答案:

答案 0 :(得分:4)

  

Nullable<T>处理T模式的原因是什么?

一些编译魔术。没有定义转换运算符允许它工作(我已经测试过),只是编译器知道如何将匹配Nullable<T>模式化为T