CS8121:'T' 类型的模式无法处理自定义 <T>
CS8121: Custom<T> cannot be handled by a pattern of type 'T'
考虑以下代码:
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
的模式?我可以为我的自定义结构做同样的事情吗?我已经尝试过转换运算符,但没有成功。不过不确定我是否尝试了所有可能的运算符。
What makes possible for Nullable<T>
to handle a pattern of T
?
一些编译器魔法。没有定义允许它工作的转换运算符(我已经测试过),只有编译器知道如何将模式匹配 Nullable<T>
到 T
.
考虑以下代码:
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
的模式?我可以为我的自定义结构做同样的事情吗?我已经尝试过转换运算符,但没有成功。不过不确定我是否尝试了所有可能的运算符。
What makes possible for
Nullable<T>
to handle a pattern ofT
?
一些编译器魔法。没有定义允许它工作的转换运算符(我已经测试过),只有编译器知道如何将模式匹配 Nullable<T>
到 T
.