c# - 如何使用带有泛型参数的类型作为约束?

标签 c# generics constraints

我想指定一个约束,它是带有通用参数的另一种类型。

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/

相关文章:

c# - 不可收集的程序集不能引用可收集的程序集

c# - 调整数组大小以丢失空值

java - 带有通配符的泛型声明

iOS 在 UITableViewCell 中均匀间隔 5 个标签

c# - 在 C++/CLI 中将新值分配给不可变值结构

c# - 批量插入,asp.net

swift - Swift 5 Conversion UnsafeBufferPointer 这些内存函数是否相同

java - 为什么我不能使用泛型类型来实现非泛型签名

database - 如何限制插入数据库

ios - 如何使用自动布局将 UITextField 重新定位到特定位置