gpt4 book ai didi

c# - Curiously Recurring Template Pattern 和泛型约束 (C#)

转载 作者:可可西里 更新时间:2023-11-01 08:52:54 26 4
gpt4 key购买 nike

我想在基泛型类中创建一个方法来返回派生对象的专门集合并对它们执行一些操作,如以下示例所示:

using System;
using System.Collections.Generic;

namespace test {

class Base<T> {

public static List<T> DoSomething() {
List<T> objects = new List<T>();
// fill the list somehow...
foreach (T t in objects) {
if (t.DoSomeTest()) { // error !!!
// ...
}
}
return objects;
}

public virtual bool DoSomeTest() {
return true;
}

}

class Derived : Base<Derived> {
public override bool DoSomeTest() {
// return a random bool value
return (0 == new Random().Next() % 2);
}
}

class Program {
static void Main(string[] args) {
List<Derived> list = Derived.DoSomething();
}
}
}

我的问题是要做这样的事情我需要指定一个约束

class Base<T> where T : Base {
}

是否有可能以某种方式指定这样的约束?

最佳答案

这可能对你有用:

class Base<T> where T : Base<T>

你不能约束T到一个开放的通用类型。如果需要约束 TBase<whatever> ,你需要构建类似的东西:

abstract class Base { }

class Base<T> : Base where T : Base { ... }

关于c# - Curiously Recurring Template Pattern 和泛型约束 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com