当前位置: 首页 > 编程语言 > C#

Type'T'mustbeanon-nullablevaluetypeordertouseitasaparameter'T'inagenerictypeormethod'System.Nullable'share

时间:2023-04-10 13:29:36 C#

type'T'mustbeanon-可空值类型,以便将其用作泛型类型或方法“System.Nullable”中的参数“T”为什么我在以下代码中收到此错误?voidMain(){整数?一=1;诠释?b=添加一个(1);A。倾倒();}staticNullableAddOne(Nullablenullable){returnApplyFunction(nullable,(intx)=>x+1);}staticNullableApplyFunction(Nullablenullable,Funcfunction){if(nullable.HasValue){Tunwrapped=nullable.Value;TResult结果=函数(展开);返回新的可空(结果);}else{returnnewNullable();代码有几个问题。首先是您的类型必须可以为空。您可以通过指定whereT:struct来表达它。您还需要指定whereTResult:struct,因为您还将它用作可空类型。修复whereT:structwhereTResult:struct后,您还需要更改返回类型(这是错误的)和其他一些事情。在修复所有这些错误并进行简化后,您最终会得到这样的结果:staticTResult?ApplyFunction(T?nullable,Funcfunction)whereT:structwhereTResult:struct{if(nullable.HasValue)返回函数(nullable.Value);否则返回空;请注意,您可以将Nullable重写为T?这使事情更具可读性。您也可以将其写成using?:statement?:但我认为它不可读:returnnullable.HasValue?(TResult?)函数(nullable.Value):null;您可能想将其放入扩展方法中:publicstaticclassNullableExt{publicstaticTResult?ApplyFunction(thisT?nullable,Funcfunction)whereT:structwhereTResult:struct{if(nullable.HasValue)返回函数(nullable.Value);否则返回空;}}然后你可以这样写代码:int?x=10;双倍的?x1=x.ApplyFunction(i=>Math.Sqrt(i));控制台.WriteLine(x1);诠释?y=空;双倍的?y1=y.ApplyFunction(i=>Math.Sqrt(i));控制台.WriteLine(y1);如错误所示,编译器无法保证T不可为空。YouneedtoaddconstraintstoT:以上是C#学习教程:Type'T'mustbeanon-nullablevaluetypeinordertouseitasaparameter'T'inangenerictypeormethod'System.Nullable'如果对大家有用,需要了解更多的C#学习教程,就全部分享给大家。希望大家多多关注——staticNullableApplyFunction(Nullablenullable,Funcfunction):whereT:structwhereTResult:struct本文收集自网络,不代表立场。侵权请点击右侧联系管理员删除。如需转载请注明出处: