加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 与其他参数一起传递操作符

发布时间:2020-12-15 18:08:28 所属栏目:百科 来源:网络整理
导读:我有一些非常低效的代码,其中许多行显示4次,因为我通过排列与“”和“”操作和各种变量和常量.似乎有一种方法来编写函数一次,并且随着必须改变的值和“ref”变量传递到运算符中.我要学什么技术?已经建议“代表”,但我看不到如何以这种方式使用它们.这是在C#
我有一些非常低效的代码,其中许多行显示4次,因为我通过排列与“<”和“>”操作和各种变量和常量.似乎有一种方法来编写函数一次,并且随着必须改变的值和“ref”变量传递到运算符中.我要学什么技术?已经建议“代表”,但我看不到如何以这种方式使用它们.这是在C#2.0,VS2005,但如果该技术是通用的,也可以与C一起使用,那将是巨大的.

请求一些代码:以下出现在许多guises,不同的“<”和“>”标志以及“ – ”符号混合:

if (move[check].Ypos - move[check].height / 200.0D < LayoutManager.VISIO_HEIGHT - lcac_c.top)
{
  move[check].Ypos = move[check].Ypos + adjust;
.
.
.

解决方法

在C中,使用 std::lessstd::greater函子.这两种方法都继承了 std::binary_function,所以你的泛型函数应该接受这种类型的实例.

在.NET中,相当于std :: binary_function是Func<T,U,R>.没有std :: less和std :: greater的等价物,但创建它们是相当微不足道的.请参见以下示例.

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,bool> Less<T>()
        where T : IComparable<T>
    {
        return delegate(T lhs,T rhs) { return lhs.CompareTo(rhs) < 0; };
    }
}

注意,上述代码使用Func& .NET 3.5中的类.如果这是不可接受的,请考虑定义您自己的代理.

C调用示例:

void DoWork(const std::binary_function<int,int,bool>& myOperator,int arg1,int arg2)
{
    if (myOperator(arg1,arg2)) { /* perform rest of work */ }
}

void main()
{
    DoWork(std::less<int>(),100,200);
    DoWork(std::greater<int>(),200);
}

C#调用示例:

void DoWork(Func<int,bool> myOperator,arg2)) { /* perform rest of work */ }
}

void main()
{
    DoWork(Functor.Less<int>(),200);
    DoWork(Functor.Greater<int>(),200);
}

编辑:我修正了函子类的例子,或>运算符到通用类型不起作用(与C模板一样).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读