【问题标题】:C# dynamic operator [duplicate]C#动态运算符[重复]
【发布时间】:2010-11-15 12:43:34
【问题描述】:

c#中可以有动态操作符吗?

string aString = "5";
int a = 5;
int b = 6;
string op = "<";

//want to do something like dynamically without checking the value of op
if( a op b)

【问题讨论】:

标签: c# dynamic


【解决方案1】:

您不能创建动态运算符 - 但可以将运算符包装在委托中。您可以使用 lambda 来简化语法。

Func<int,int,int> opPlus = (a,b) => a + b;
Func<int,int,int> opMinus = (a,b) => a - b;
// etc..

// now you can write:
int a = 5, b = 6;
Func<int,int,int> op = opPlus;
if( op(a,b) > 9 )
    DoSomething();

虽然还不确定——C# 的未来方向是将编译器实现为服务。因此,在某些时候,可能会编写动态评估表达式的代码。

【讨论】:

    【解决方案2】:

    附和 LBushkin 的回应:

    Func<int, int, bool> AGreaterThanB = (a,b) => a > b;
    Func<int, int, bool> ALessThanB    = (a,b) => a < b;
    
    Func< int, int, bool> op = AGreaterThanB;
    
    int x = 7;
    int y = 6;
    
    if ( op( x, y ) ) 
    {
        Console.WriteLine( "X is larger" );
    }
    else
    {
        Console.WriteLine( "Y is larger" );
    }
    

    http://msdn.microsoft.com/en-us/library/bb549151.aspx

    【讨论】:

      【解决方案3】:

      C# 4.0 将有一个用于动态类型的 dynamic 关键字。

      【讨论】:

      • 为什么需要动态操作符?也许你应该尝试使用泛型或向下转换到对象
      • 主要与动态框架和语言交互。
      • 无论如何这对他没有帮助,因为它对eval 没有用——这正是他想要的。
      • 我知道动态关键字应该做什么:P
      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2015-06-04
      • 2012-12-22
      • 2016-09-26
      • 2012-04-21
      • 1970-01-01
      相关资源
      最近更新 更多