C#里将运算符按参数传递以及WPF中将属性按引用传递
2013-04-01 10:17
288 查看
一、运算符作为参数传递
C++中是有std::less和std::greater运算符的,但是C#里没有,所以就需要自己先定义。
然后可以按如此的方法调用:
二、按引用传递WPF中的属性
这点是不可行的,但是有这么几种方法可以绕开它以达到目的。比如可以将想赋的值作为返回值返回,或者用如下两种方法:
或者
C++中是有std::less和std::greater运算符的,但是C#里没有,所以就需要自己先定义。
static class Functor { static Func<T, T, bool> Greater<T>() where T : IComparable<T> { return delegate(T lhs, T rhs) { return lhs.CompareTo(rhs) > 0; }; } static Func<T, T, bool> Less<T>() where T : IComparable<T> { return delegate(T lhs, T rhs) { return lhs.CompareTo(rhs) < 0; }; } }
然后可以按如此的方法调用:
void DoWork(Func<int, bool> myOperator, int arg1, int arg2) { if (myOperator(arg1, arg2)) { /* perform rest of work */ } } void main() { DoWork(Functor.Less<int>(), 100, 200); DoWork(Functor.Greater<int>(), 100, 200); }
二、按引用传递WPF中的属性
这点是不可行的,但是有这么几种方法可以绕开它以达到目的。比如可以将想赋的值作为返回值返回,或者用如下两种方法:
//使用 delegate void GetString(string input, Action<string> setOutput) { if (!string.IsNullOrEmpty(input)) { setOutput(input); } } void Main() { var person = new Person(); GetString("test", () => person.Name, value => person.Name = value); Debug.Assert(person.Name == "test"); }
或者
//Linq Expression void GetString<T>(string input, T outObj, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(input)) { var expr = (MemberExpression) outExpr.Body; var prop = (PropertyInfo) expr.Member; prop.SetValue(outObj, input, null); } } void Main() { var person = new Person(); GetString<Person>("test", person, x => x.Name); Debug.Assert(person.Name == "test"); }
相关文章推荐
- c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- C# 数据类型的引用类型、值类型内存存储方式以及区别; 函数参数传递的引用传递(址传递)、值传递区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别
- 理解C#中参数的值和引用以及传递结构和类引用的区别
- C#调用C++编写的DLL函数, 以及各种类型的参数传递
- C# 函数参数传递(按值和引用)讲解
- C#参数的传递:值传递、引用传递、输出参数
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- c#中通过值和引用传递参数
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- C# 函数参数传递(按值和引用)很容易混淆的概念啊
- c# 多线程传递参数以及任务
- C# 参数传递、引用传递的一些个人理解
- C#方法参数传递-引用参数ref关键字
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一) 分类: C# 2012-11-01 22:12 620人阅读 评论(0) 收藏