0

看看这个片段

public interface IExample<T>
{
    IExample<T> Exposes<TInclude>() 
        where T : TInclude;
}

我希望编译时强制 T 可转换为 TInclude。可以进行运行时检查,但希望它是编译时。

上面抱怨 T 没有定义。

有什么建议么?我试图用 C# 泛型做的事情是可能的吗?

4

3 回答 3

5

改写你的问题:

可以创建一个where子句来强制执行TIncludeT或派生自 的任何类型的约束T。我希望强制执行“相反方向”约束:即TIncludeT任何“基本类型”的T. 这可能吗?

不,C# 不支持这种约束。对不起。

有什么建议么?

Scala 支持我认为的那种约束。和 Java 一样,尽管 Java 的做法有点奇怪。但我想你不想改变语言。

你能更详细地描述你真正想用这个界面表示的概念吗?如果我们知道你想要做什么,那么给你实用的建议会更容易。

于 2013-03-12T20:12:00.707 回答
1

您可以将类型约束移动到接口级别,如下所示:

public interface IExample<T, U>
    where T : U
{
    IExample<T, U> Exposes();
}
于 2013-03-12T19:48:48.050 回答
0

它可能有一天会实现:见1.2 广义约束

于 2013-03-12T20:15:21.557 回答