【问题标题】:Custom logical "and" operator自定义逻辑“与”运算符
【发布时间】:2014-01-22 09:50:48
【问题描述】:

我已经构建了自己的查询生成器和解析器以供某些用途。
今天工作正常。
我想更改 api,而不是写 .And().Or(),我想写 && || ,就像在 IQueryable 中一样。
在我的情况下可能吗?:

interface IQ{
     IQ And(IQ q);
     IQ Or(IQ q);
}

class StringQ : IQ{

}
class IntQ : IQ{

}
// this is how I write the query today:
IQ q = new StringQ("a == str").Or(new IntQ("b == 1"));

// I want to write the query - not the || statement
IQ q = new StringQ("a == str") || new IntQ("b == 1")

所以|| 语句将在其中承载IQ
类似:

interface IQ{
     IQ &&(IQ q);
     IQ ||(IQ q);
}

【问题讨论】:

  • 也许您可以向我们展示一个使用IQueryable 的示例?
  • 运算符是作为静态方法实现的,所以我认为不可能让它成为接口的一部分。这让我们要么在具体类中实现它,要么在接口中创建自定义方法(例如 And)。
  • 您没有发现我的回答有帮助吗?
  • @OndrejJanacek - 不是,因为它是静态操作....

标签: c# operators


【解决方案1】:

我相信这可以通过一些努力来完成。

首先,您知道这些运算符可以重载in a way

条件逻辑运算符不能重载,但使用 & 和 | 求值,可以重载。

其次,您需要一个小技巧来强制实现重载运算符 - 为此,请查看this SO 问题。

如果你想知道我的看法,这种努力不值得你从中看到的好处。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 2014-07-07
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多