C#中是否有带有参数约束的泛型构造函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (100)

在C#中,你可以对泛型方法施加约束:

public class A {

    public static void Method<T> (T a) where T : new() {
        //...do something...
    }

}

你指定的地方T应该有一个不需要参数的构造函数。我不知道是否有一种方法来添加约束,如“ 存在与构造函数float[,]参数?

下面的代码不能编译:

public class A {

    public static void Method<T> (T a) where T : new(float[,] u) {
        //...do something...
    }

}
提问于
用户回答回答于

正如你所发现的,你不能这样做。

作为一种解决方法,我通常会提供一个可以创建类型对象的委托T

public class A {

    public static void Method<T> (T a, Func<float[,], T> creator) {
        //...do something...
    }

}
用户回答回答于

没有这样的构造。你只能指定一个空的构造函数约束。

我用lambda方法解决了这个问题。

public static void Method<T>(Func<int,T> del) {
  var t = del(42);
}

用例

Method(x => new Foo(x));

扫码关注云+社区

领取腾讯云代金券