如何使用约束将T限制为值类型?我想限制N可以使用约束可以采用的类型。我希望将N限制为int或decimal。publicstaticChartPopulateInto(ListyAxis,ListxAxis)whereN:int,decimal{//Dostuffhere}任何帮助都说......不幸的是,没有办法指定只允许特定值类型的通用类型约束。更何况,就算允许也没有多大意义。您可以将一个类指定为泛型约束,但那是因为您可以从该类继承,所以该约束设置了允许的类型的最小阈值。如果允许值类型,则您不能从这些类型继承,那么您实际上只是将自己限制为该类型。所以你不能这样做,但你有几个选择:这里是你要声明的重载:xAxis){//Dostuffhere}现在,另外,如果你对这些值的处理并不真正依赖于这些类型的数值质量,而你只是想限制你可以处理的类型,你也可以私下声明原始方法,并调用此方法来自您的重载方法。这仍然会将您的代码限制为仅公开允许int或decimal,但您的实现仍然是通用的。如果不确切知道“在这里做什么”需要什么,就不可能判断这是否是一个可行的选择,但这里是代码:}publicstaticChartPopulateInto(ListyAxis,ListxAxis){returnPopulateInto(yAxis,xAxis);}privatestaticChartPopulateInto(ListyAxis,ListxAxis)whereN:struct{//Dostuffhere}泛型参数不能约束为特定值类型。但是,您可以通过添加whereN:struct强制它成为值类型或whereN:struct,仅此而已。这不能使用约束来完成。假设PopulateInto可以使用genericsN,另一种方法是使核心算法通用和私有,并提供2个公共重载,分别采用int和decimal。这将产生类似publicstaticChartPopulateInto(ListyAxis,ListxAxis){returnPopulateIntoCore(yAxis,xAxis);的效果。}publicstaticChartPopulateInto(ListyAxis,ListxAxis){returnPopulateIntoCore(yAxis,xAxis);}privatestaticChartPopulateIntoCore(ListyAxis,ListxAxis)whereN:struct{...}正如彼得所说,您不能使用编译时检查。但是,你可以在运行时进行如下操作:以上是C#学习教程:如何使用约束将T限制为值类型?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——if(!(typeof(N).equals(typeof(int32)))&&!(typeof(N).equals(typeof(decimal))))//dosomething本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
