C#override~获取函数

C#override~获取函数,c#,operators,overloading,C#,Operators,Overloading,理想情况下,我希望实现类似var queryResult=~(()=>function(arg)) 我写了一个自动化框架,我已经厌倦了为它写长长的代码行。它使用查询来搜索UI和其他数据源。所以我想,既然这个项目是独立于源代码的,我就可以不用和运营商混日子了。下面的代码编译得很好,但我得到一个错误: 无法对lambda表达式类型的操作数应用运算符“~” public struct Query<T> { public static Query<T> operator

理想情况下,我希望实现类似
var queryResult=~(()=>function(arg))

我写了一个自动化框架,我已经厌倦了为它写长长的代码行。它使用查询来搜索UI和其他数据源。所以我想,既然这个项目是独立于源代码的,我就可以不用和运营商混日子了。下面的代码编译得很好,但我得到一个错误:

无法对lambda表达式类型的操作数应用运算符“~”

public struct Query<T>
{
    public static Query<T> operator ~(Query<T> func)
    {
        return Poll.IdleFor(() => func, 10000);
    }
}
公共结构查询
{
公共静态查询运算符~(Query func)
{
返回Poll.IdleFor(()=>func,10000);
}
}
在代码的另一部分中,我有一个方法签名,如下所示:

static T IdleFor(Func-arg,long waittimeinmillides)(Func-arg,long-millides)

我通过
MyStaticClass.IdleFor(()=>myFunction(val),10000)调用它

我错过了什么

我可以和接线员混日子

这在C#中是一种非常非常糟糕的态度。在C#中,“胡乱使用运算符”来生成数学语义以外的语义是一种糟糕的做法,我强烈建议您不要尝试这样做

我注意到你没有问一个可以回答的问题。“我遗漏了什么?”并不是一个足够具体的问题来回答。因此,让我们提出一些可回答的问题:

是否可以在C#中重载一元运算符,使该运算符的操作数可以是lambda表达式

没有

如何在C#中解析重载的一元运算符

首先确定操作数的类型。从该类型创建重载运算符的列表。然后,重载解析或多或少地按照方法重载解析进行,将操作数视为参数,将运算符视为方法

那么,为什么这不适用于lambdas呢

我说的是首先确定操作数的类型。lambda没有类型。因此,没有重载运算符的列表,首先要对其执行重载解析

我可以和接线员混日子

这在C#中是一种非常非常糟糕的态度。在C#中,“胡乱使用运算符”来生成数学语义以外的语义是一种糟糕的做法,我强烈建议您不要尝试这样做

我注意到你没有问一个可以回答的问题。“我遗漏了什么?”并不是一个足够具体的问题来回答。因此,让我们提出一些可回答的问题:

是否可以在C#中重载一元运算符,使该运算符的操作数可以是lambda表达式

没有

如何在C#中解析重载的一元运算符

首先确定操作数的类型。从该类型创建重载运算符的列表。然后,重载解析或多或少地按照方法重载解析进行,将操作数视为参数,将运算符视为方法

那么,为什么这不适用于lambdas呢


我说的是首先确定操作数的类型。lambda没有类型。因此,没有重载运算符列表,首先要对其执行重载解析。

~
是一元运算符,因此不能为其指定参数。这个
~
应该做什么?否定?我试图模仿jquery风格$,所以最终我会将测试代码改成更像$('sdsd').DoSomething(),即~(()=>findelelement('sdsd')).DoSomething()@crashmstr它是一元的,所以它必须有一个参数。这就是一元数的意思…@Servy…他们在MSDN上没有给出这样的例子,通常你会让对象本身就是这一个参数(但签名没有参数)。
~
是一元数,所以你不能给它一个参数。这个
~
应该做什么?否定?我试图模仿jquery风格$,所以最终我会将测试代码改成更像$('sdsd').DoSomething(),即~(()=>findelelement('sdsd')).DoSomething()@crashmstr它是一元的,所以它必须有一个参数。这就是一元数的意思…@Servy…他们在MSDN上没有给出这样的例子,通常你会让对象本身就是这一个参数(但签名没有参数)。有趣的是,这是语言的语义限制。感谢您添加对语言细节的解释。很有趣,这是语言的语义限制。感谢您添加语言详细信息的解释。