gpt4 book ai didi

c# - 类型参数的构造函数签名约束

转载 作者:行者123 更新时间:2023-11-30 14:02:16 26 4
gpt4 key购买 nike

public static IEnumerable<TV> To<TU, TV>(this IEnumerable<TU> source) where TV : new(TU)
{
return source.Select(x => new TV(TU));
}

问题是我不能给出新的(TU)约束。

  • 这个问题有什么解决办法吗?

最佳答案

我为您提供了两种方法:

首先使用Activator.CreateInstance

public static IEnumerable<TV> To<TU, TV>(this IEnumerable<TU> source)
{
return source.Select(m => (TV) Activator.CreateInstance(typeof(TV), m));
}

其次,您可以使用接口(interface)来定义属性,而不是使用参数化构造函数:

public interface IRequiredMember
{}

public interface IHasNeccesaryMember
{
IRequiredMember Member
{
get;
set;
}
}

public static IEnumerable<TV> To<TU, TV>(this IEnumerable<TU> source)
where TV : IHasNeccesaryMember, new()
where TU : IRequiredMember
{
return source.Select(m => new TV{ Member = m });
}

第一种方法有效,但感觉很脏,并且存在构造函数调用错误的风险,尤其是当该方法不受约束时。

因此,我认为第二种方法是更好的解决方案。

关于c# - 类型参数的构造函数签名约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303603/

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