C# 基于布尔结果而不使用iF字的触发函数

C# 基于布尔结果而不使用iF字的触发函数,c#,lambda,delegates,ternary,C#,Lambda,Delegates,Ternary,或者只是 if(someBoolTest()) dothis() else dothat(); 这样做不是很好吗 if(someBoolTest()) dothis(); 或 这是用其他语言完成的吗? 我们如何在C#中做到这一点? (我认为我们做不到,那为什么不呢?) 编辑: 我知道三元操作,但这并没有使它看起来更好。如果能用某种形式的lambda和代理来实现这一点,那就太好了。您是这样做的 someBoolTest() => dothis() 但你到底想做什么 我们如何在C#中做到

或者只是

if(someBoolTest()) dothis()
else dothat();
这样做不是很好吗

if(someBoolTest()) dothis();

这是用其他语言完成的吗? 我们如何在C#中做到这一点? (我认为我们做不到,那为什么不呢?)

编辑: 我知道三元操作,但这并没有使它看起来更好。如果能用某种形式的lambda和代理来实现这一点,那就太好了。

您是这样做的

someBoolTest() => dothis()
但你到底想做什么

我们如何在C#中做到这一点

使用
if-else
子句,就像您在示例中所做的那样

你可以创造性地创造出这样的东西:

    bool myBool = true;
    bool newBool;
    public void Main()
    {
        MyFunction( newBool = (aFunctionThatReturnsABool == true) ? true: false);
    }

    public void MyFunction (bool aBool)
    {
        // stuff based on the bool
    }

但这是非常不可读的代码,不要这样做。

我相信三元运算符就是您要寻找的:

变量=条件?值如果为真:值如果为假

例如,如果满足条件,则希望int等于0,如果不满足条件,则希望int等于3:

(SomeBoolTest() ? (Action)DoThis : DoThat)();
在这种情况下,n将被赋值为3!这上面有一个很好的维基百科页面,过来看看:)


您可以,但不应该,做一些类似于您提到的语法的事情,比如在
bool
类型上编写扩展方法,如下例所示:

int this = 500;
int that = 700;
int n = (this==that) ? 0 : 3;

需要调用方法,而不是设置变量
(aFunctionthatReturnsBool==true)?true:false
完全等同于
返回工具的函数,顺便说一句。与
if
语句相比,您的语法有什么优势?您需要知道,我真的不清楚这个问题的要点。这仅仅是一种咆哮,你对C#不是函数式语言感到不高兴吗?是的,这部分是一种咆哮。但同时,它也提出了一个问题:为什么C语言不能有这种语言扩展?但我对C语言很满意,它是我每天都在使用的。我确信函数式语言有不同的方法来进行
if-else
分支。不过,我看不出他们有什么不对劲。@Black什么是脏话?@Black他指的是
if else
我只是想说清楚。因为
if-else
是编程的基本构建块之一。使用
?:操作符
的缺点是,is不起作用。你真的能清楚地表达你对if-else构造的反感吗?它将if推迟到一个较低的级别,这是一个improvement@Claies如您所见,答案明确指出“与语法相似的东西……”,它的目的并不是为了摆脱if语句。true,但在其他评论中,发帖人提出了这个问题的原因,首先是他们不喜欢if-else
,称之为“这些肮脏的单词,将从所有进化语言中删除”。这不是一个合理的说法,但海报已经明确表示,他们希望有一个替代
if else
,而不仅仅是语法来隐藏它(除非我有点偏离)。当您希望条件表达式返回值,并且每个操作数都是返回值的函数时,这种方法非常有用。然而,问题是如何有条件地执行两个函数都不返回值的一对函数。
int this = 500;
int that = 700;
int n = (this==that) ? 0 : 3;
public static class UselessExtensions
{
    public static void WhenTrue(this bool evaluatedPredicate, Action whenTrue)
    {
        if (evaluatedPredicate)
            whenTrue();
    }
}

public static class TryingUselessExtensions
{
    public static bool SomeBoolTest()
    {
        return true;
    }

    public static void DoIt()
    {
        SomeBoolTest().WhenTrue(() => Console.WriteLine(true));
    }
}