Csharp/C#教程:为通用参数指定构造函数约束分享


为通用参数指定构造函数约束

我有一组对象,我作为参数传递给另一种类型的对象(一对一)。 我在很多地方这样做(基本上是从数据对象转换为业务对象)。 我想写一个通用的扩展方法来完成这个。 但是我被卡住了,因为我不知道如何指定业务对象具有将数据对象作为参数的构造函数的约束。 以下是我的function代码:

public static IList ConvertTo(this IEnumerable list) where T : new(A)/*THIS IS PROBLEM PART*/ { var ret = new List(); foreach (var item in list) { ret.Add(new T(item)); } return ret; } 

不幸的是,C#中不允许这样做。 您可以使用new()约束来强制该类型具有默认构造函数,但这是.NET支持的唯一构造函数相关约束。

您最好的选择可能是定义一个可以使用的界面,并约束到界面。 您可以使用“初始化”样式方法来获取“A”对象,然后调用它,而不是尝试在构造时设置对象。

您不能以这种方式约束generics类型构造函数(仅需要无参数构造函数),但您可以使用委托来执行构造:

 public static IList ConvertTo(this IEnumerable list, Func constructionFunc) { return list.Select(constructionFunc).ToList(); } 

并像这样使用它:

上述就是C#学习教程:为通用参数指定构造函数约束分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var IList converted = someSequence.ConvertTo(a => new T(a)); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998570.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐