C# 为什么这个monad不能编译
为什么这个单子不编译?注释行工作正常。添加C# 为什么这个monad不能编译,c#,visual-studio-2015,.net-4.6,C#,Visual Studio 2015,.net 4.6,为什么这个单子不编译?注释行工作正常。添加其中U:class使其可编译,但这增加了限制 public static U To<T, U>(this T self, Func<T, U> eval) => eval?.Invoke(self) ?? default(U); // => eval == null ? default(U) : eval(self); publicstaticu-To(这个T-self,Func-eval) =>评估
其中U:class
使其可编译,但这增加了限制
public static U To<T, U>(this T self, Func<T, U> eval)
=> eval?.Invoke(self) ?? default(U);
// => eval == null ? default(U) : eval(self);
publicstaticu-To(这个T-self,Func-eval)
=>评估?调用(自身)??违约(U);
//=>eval==null?默认值(U):评估(自身);
运算符“?”不能应用于“U”类型的操作数
@复制品
无论如何,不要认为这是那个的复制品。我正在合并func,而不是泛型类型,并在coalesc(?)not null条件运算符(?)上获得错误,就像在另一个问题中一样。因为类是可空的('eval')可以工作。我的意思是说“containts”似乎没有提供一种方法来指定“struct”现在可以为null。type
U
可以是值类型,并且不能与null合并运算符(?
)或null条件运算符(?
)一起使用。(请注意,由于某些原因,此问题已被回答并删除)。要修复它,您可以在方法上添加where U:class
约束。@DavidG-Well正在合并funceval
和=>eval?.Invoke(self)??评价(自我)代码>(白痴语句但删除U)给出了相同的错误。。?正如我所说,添加约束限制了monad。因为类是可空的(“eval?”可以工作)。我的意思是说“containts”似乎没有提供一种方法来指定“struct”现在可以为null。typeU
可以是值类型,并且不能与null合并运算符(?
)或null条件运算符(?
)一起使用。(请注意,由于某些原因,此问题已被回答并删除)。要修复它,您可以在方法上添加where U:class
约束。@DavidG-Well正在合并funceval
和=>eval?.Invoke(self)??评价(自我)代码>(白痴语句但删除U)给出了相同的错误。。?正如我所悲伤的,添加约束限制了monad。