使用自由绑定泛型类型作为类型参数

时间:2010-08-16 13:26:38

标签: c# .net generics

您是否看到了一种方法来指定我的结果类型必须 MonadType< arg类型> 在此界面中?

interface IMonad<MonadType>  //  where MonadType : GenricType<>
{
    MonadType<T1> unit<T1>(T1 t)
    Func<MonadType<T1>, MonadType<T2>> map<T1, T2>(Func<T1, T2> f);
}

我得到一个错误: 类型参数'MonadType'不能与类型参数一起使用

1 个答案:

答案 0 :(得分:0)

不,你不能用.NET泛型做到这一点。您要做的是指定MonadType类型参数本身必须具有一个通用参数; .NET类型系统不能代表该约束。

这是伪造C#中通用monad的一种方法:http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c