当前位置: 首页 > wzjs >正文

国外购物网站排行榜网站程序开发

国外购物网站排行榜,网站程序开发,网站打开速度慢跟什么有关系,网页设计与制作属于什么专业概要 本文提供了一个基于C#表达式目录树的方法来解决泛型参数不能调用带参数的构造方法来实例化的问题。 C#泛型的限制 我们看如下的代码&#xff0c;User类需要一个泛型类&#xff0c;泛型类是要以CreditCard为基类。 class User<T> where T :CreditCard, new() {pr…

概要

本文提供了一个基于C#表达式目录树的方法来解决泛型参数不能调用带参数的构造方法来实例化的问题。

C#泛型的限制

我们看如下的代码,User类需要一个泛型类,泛型类是要以CreditCard为基类。

class User<T> where T :CreditCard, new()
{private readonly T _value;public User(){_value = new T();}}

以上代码可以正常运行,但是我们稍加修改,我们需要调用信用卡类的另一个构造方法,传入用户id,代码如下:

class User<T> where T :CreditCard, new()
{private readonly T _value;public User(){_value = new T(userId);}}

上面的代码是不能通过编译的,因为C#无法在创建变量类型的实例时候,传入参数。这个是C#的限制。

解决方法

我们通过构造表达式目录树,动态构建一个委托,将参数传入。目标委托的是(int userId) => T(userId),我们执行该委托方法,就可以传入参数,在创建变量类型的实例时候,传入参数。

我们定义一个方法createTWithParam(int userId)的方法,用表达式目录树实现该方法:

	public T createTWithParam(int userId) {ParameterExpression parameter = Expression.Parameter(typeof(int), "userId");ConstructorInfo ctor = typeof(T).GetConstructor(bindingAttr: BindingFlags.Instance | BindingFlags.Public,binder: null,callConvention: CallingConventions.HasThis,types: new[] { typeof(int), typeof(string) },modifiers: new ParameterModifier[] { });var expressionNew = Expression.New(ctor, new Expression[] { parameter });LambdaExpression newLambda = Expression.Lambda<Func<int, T>>(expressionNew, new ParameterExpression[] { parameter });var newLambdaDelegate = (Func<int,T>)newLambda.Compile();var creditCard = newLambdaDelegate.Invoke(number);return creditCard;}
  1. 构造Lambda表达式左侧的(int userId),变量名是userId;
  2. 构造 表达式new T(userId);
  3. 编译表达式,生成委托;
  4. 传入参数,调用该委托,生成T类型的实例。

附录

internal  class CreditCard
{public CreditCard(int userId){Console.WriteLine(userId);}public CreditCard(){}
}
http://www.dtcms.com/wzjs/534913.html

相关文章:

  • 珠海市官网网站建设品牌上海注册公司需要多久
  • 网站制作对公司的作用注册域名哪个网站好
  • 泰州网站制作编程软件做网站的
  • 网站建设名词解释与简答题室内设计公司加盟
  • 兰州网站建设报价简单个人网站制作
  • 梧州外贸网站推广设计网易企业邮箱服务器设置
  • 做网站要注册公司么东莞智通人才网招聘
  • 贵阳网站开发制作公司怎么在公众号上做网站
  • 厦门建网站品牌湖北德升建站
  • 绿化公司网站建设做网站需学什么
  • 微信公众号微网站怎么做的眉山网站定制
  • 做网站的公司北京有哪些wordpress form 生成
  • jeecms 怎么建设网站微信公众号文章 转wordpress
  • 校园网站建设 德育上海高端建站
  • 网站推广优化招聘竞价推广托管公司介绍
  • 亚马逊网站开发者平台wordpress 客户
  • 网站域名需icp备案吗我想给图书网站做代理
  • 东莞网站优化如何数码网站建设
  • 网站建设在哪学logo一键生成器哪个好
  • 怎么做磁力网站怎么让百度收录你的网站
  • 石家庄网站定制什么是网站的二级目录
  • 网络工程毕设做网站网店美工名词解释
  • 网站建设策划报告当地的建设工程信息网
  • 东莞网站建设价位做网站前需要准备什么条件
  • 建设地区网站建议宁波建站模板厂家
  • 设计素材网站版权问题漳州企业网站建设
  • 网站不备案可以做百度推广吗两个男生是怎么做的细写
  • 社交网站的设计简单个人网页制作成品
  • 南通网站优化推广广州服装网站建设
  • 网站建设一般好久到期郑州移动网站建设