C# 泛型方法,new() 构造函数约束中的类型参数

2024-07-01

有没有办法创建一个使用的通用方法new()要求类具有特定类型的构造函数属性的约束?

例如:

我有以下代码:

public T MyGenericMethod<T>(MyClass c) where T : class
{
    if (typeof(T).GetConstructor(new Type[] { typeof(MyClass) }) == null)
    {
        throw new ArgumentException("Invalid class supplied");
    }
    // ...
}

有可能有这样的东西来代替吗?

public T MyGenericMethod<T>(MyClass c) where T : new(MyClass)
{
    // ...
}

EDIT:一条建议 http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2122427-expand-generic-constraints-for-constructors关于这一点。请投票,以便我们可以在 C# 中拥有此功能!

EDIT 2:该网站已被删除。现在建议已开启Github https://github.com/dotnet/csharplang/discussions/769。跟进那里!


并不真地; C# 仅支持无参数构造函数约束。

我用于通用 arg 构造函数的解决方法是将构造函数指定为委托:

public T MyGenericMethod<T>(MyClass c, Func<MyClass, T> ctor) {
    // ...
    T newTObj = ctor(c);
    // ...
}

然后调用时:

MyClass c = new MyClass();
MyGenericMethod<OtherClass>(c, co => new OtherClass(co));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 泛型方法,new() 构造函数约束中的类型参数 的相关文章

随机推荐