解决方案 »
- webpart的位置自动变,怎么回事
- datagridview添加或修改时的问题
- 比较优秀的测试软件有哪些?
- 共享-net一些常用程序源码(不看后悔哦)17个例程源码
- ??DateSet可以读入XML文件并把它当作一个表,我修改这个表后,如何保存回XML文件?
- 如何实现软件的多语言切换?????
- 添加数据遇到的问题!
- 安装vs.net2005后,控件缺少focus属性,所有控件都没有。
- 关于C#操作WORD的问题:如何实现新建一个WORD文件,并在其中加入几行文字,并且这几行文字要有不同格式。
- dotNet中,如何使用WM_NCCALCSIZE或者其他更好的方法来改变一个窗口的客户区的大小或者位置?
- AE+C#开发
- 封装opencv的函数,形成自己的dll文件,调试(debug+release)正确,运行(ctrl+f5)内存溢出
if(items[i] is int ) items[i]=items[i]+1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
class Program
{
static T Inc<T>(T value)
{
var x = Expression.Parameter(typeof(T), "x");
var body = Expression.Increment(x);
var lambda = Expression.Lambda(body, x);
return (lambda.Compile() as Func<T, T>)(value);
} static void Main(string[] args)
{
Console.WriteLine(Inc(2));
Console.WriteLine(Inc(1.2f));
}
}
}3
2.2
请按任意键继续. . .
可以百度一下 “c# 运算符重载”,c#也完全可以实现泛型List重载++操作符,只需要给List<T> 中的T重载++运算符即可! public static T operator ++(Complex c1, Complex c2) ...{ return c1 + new T ...{ Real = c2.Real, Imaginary = c2.Imaginary }; }随手百度了一下语法哈
T3.X=T1.X+T2.X;
T3.Y=T1.Y-T2.Y;
......
return T3 }
楼上的其他各位,请不要根据经验想当然的写代码,有空也检测一下你的代码再发
下面是修改后代码,成功编译:
public class class1<T>
{
private static List<T> items = new List<T>(); public static List<T> MyItems
{
get
{
return items;
}
} public static void MySub()
{
for (int i = 0; i < items.Count; i++)
{
//items[i]++; //这里提示错误:运算符"++"无法应用于"T"类型的操作数
//将集合中各个项目值加1
items[i]=Inc(items[i]); //Console.WriteLine(items[i]);
}
}
//使用Lambda表达式将类型参数的值加1。使用的好处是可以动态编译
private static T Inc(T value)
{
var x = Expression.Parameter(typeof(T), "x");
//var body = Expression.Increment(x); //.NEE 3.5不提供 Increment (增量)方法
var body = Expression.Add(x, Expression.Constant(1)); //将类型参数的值加1 //下面两段代码作用相同。只是将两行写成一行了。
//var lambda = Expression.Lambda(body, x);
//return (lambda.Compile() as Func<T, T>)(value); //下面两行作用相同
//return (Expression.Lambda<Func<T, T>>(body, x).Compile())(value);
return (Expression.Lambda(body, x).Compile() as Func<T, T>)(value);
}
}
楼上的其他各位,请不要根据经验想当然的写代码,发代码的时候自己先检测一下
下面是修改后代码,成功编译:
public class class1<T>
{
private static Collection<T> items = new Collection<T>(); public static Collection<T> MyItems
{
get
{
return items;
}
} public static void MySub()
{
for (int i = 0; i < items.Count; i++)
{
//items[i]++; //这里提示错误:运算符"++"无法应用于"T"类型的操作数 //将集合中各个项目值加1
items[i]=Inc(items[i]); //Console.WriteLine(items[i]);
}
} //使用Lambda表达式将类型参数的值加1。使用的好处是可以动态编译
private static T Inc(T value)
{
var x = Expression.Parameter(typeof(T), "x");
//var body = Expression.Increment(x); //.NET 3.5不提供 Increment (增量)方法
var body = Expression.Add(x, Expression.Constant(1)); //将类型参数的值加1 //下面两段代码作用相同。只是将两行写成一行了。
//var lambda = Expression.Lambda(body, x);
//return (lambda.Compile() as Func<T, T>)(value); //下面两行作用相同
//return (Expression.Lambda<Func<T, T>>(body, x).Compile())(value);
return (Expression.Lambda(body, x).Compile() as Func<T, T>)(value);
}
}