我想指定一个约束,它是带有通用参数的另一种类型。
class KeyFrame<T>
{
public float Time;
public T Value;
}
// I want any kind of Keyframe to be accepted
class Timeline<T> where T : Keyframe<*>
{
}
但是到目前为止,这还不能在 C# 中完成(我真的怀疑它永远不会实现)。是否有任何优雅的解决方案,而不必指定关键帧参数的类型?:
class Timeline<TKeyframe, TKeyframeValue>
where TKeyframe : Keyframe<TKeyframeValue>,
{
}
最佳答案
阅读 Eric Lippert's blog 中的内容 基本上,您必须找到一种方法来引用所需的类型而不指定辅助类型参数。
在他的文章中,他将此示例展示为可能的解决方案:
public abstract class FooBase
{
private FooBase() {} // Not inheritable by anyone else
public class Foo<U> : FooBase {...generic stuff ...}
... nongeneric stuff ...
}
public class Bar<T> where T: FooBase { ... }
...
new Bar<FooBase.Foo<string>>()
希望有帮助, 特洛伊
关于c# - 如何使用带有泛型参数的类型作为约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/149909/