C# 这段C代码是做什么的?

C# 这段C代码是做什么的?,c#,C#,result.IsVisible等于什么 if(a==b) result.IsVisible = obj1.status.abc_REPORT == 'Y' && obj1.AnotherValue.ToBoolean() == false; 这取决于obj1.status.abc_Report和obj1.AnotherValue.ToBoolean()(这完全取决于a==b) 我不太确定这里真正的问题是什么——哪一点让你困惑 有

result.IsVisible等于什么

    if(a==b)
        result.IsVisible = obj1.status.abc_REPORT == 'Y'
            && obj1.AnotherValue.ToBoolean() == false;

这取决于
obj1.status.abc_Report
obj1.AnotherValue.ToBoolean()
(这完全取决于a==b)

我不太确定这里真正的问题是什么——哪一点让你困惑

有一点可能会让您感到困惑,那就是短路&&运算符(可能是缺少支撑!)

如果左侧的计算结果为
true
,则&&运算符将仅计算其右侧的值;如果且仅当两侧的计算结果均为
true
,则表达式的总体结果为
true
。(我假设这里没有奇怪的用户定义转换。)

因此,另一种写作方式是:

if (a == b)
{
    bool visibility = false;
    if (obj1.status.abc_REPORT == 'Y')
    {
        if (obj1.AnotherValue.ToBoolean() == false)
        {
            visibility = true;
        }
    }
    result.IsVisible = visibility;
}
请注意,比较布尔值的条件如下:

obj1.AnotherValue.ToBoolean() == false
!obj1.AnotherValue.ToBoolean()
通常是这样写的:

obj1.AnotherValue.ToBoolean() == false
!obj1.AnotherValue.ToBoolean()

(注意开头的感叹号-逻辑“not”运算符。)

这取决于
obj1.status.abc_Report
obj1.AnotherValue.ToBoolean()的值(这取决于a==b)

我不太确定这里真正的问题是什么——哪一点让你困惑

有一点可能会让您感到困惑,那就是短路&&运算符(可能是缺少支撑!)

如果左侧的计算结果为
true
,则&&运算符将仅计算其右侧的值;如果且仅当两侧的计算结果均为
true
,则表达式的总体结果为
true
。(我假设这里没有奇怪的用户定义转换。)

因此,另一种写作方式是:

if (a == b)
{
    bool visibility = false;
    if (obj1.status.abc_REPORT == 'Y')
    {
        if (obj1.AnotherValue.ToBoolean() == false)
        {
            visibility = true;
        }
    }
    result.IsVisible = visibility;
}
请注意,比较布尔值的条件如下:

obj1.AnotherValue.ToBoolean() == false
!obj1.AnotherValue.ToBoolean()
通常是这样写的:

obj1.AnotherValue.ToBoolean() == false
!obj1.AnotherValue.ToBoolean()
(注意开头的感叹号-逻辑“not”运算符。)

简单地说:

如果a等于b:

只有在以下情况下,结果才可见:

object1的状态abc_报告为“是”(Y=很可能是),object1的其他值不能转换为布尔值

如果a等于b:

只有在以下情况下,结果才可见:


object1的状态abc_报告为“是”(Y=很可能为“是”),object1的其他值不能转换为布尔值,与此相同,行数更少:

if (a==b) {
    if (obj1.status.abc_REPORT == 'Y') {
         if (obj1.AnotherValue.ToBoolean() == false) {
             result.IsVisible = true;
         }
         else {
             result.IsVisible = false;
         }
    }
    else {
        result.IsVisible = false;
    }
}

与此相同,在更少的行中:

if (a==b) {
    if (obj1.status.abc_REPORT == 'Y') {
         if (obj1.AnotherValue.ToBoolean() == false) {
             result.IsVisible = true;
         }
         else {
             result.IsVisible = false;
         }
    }
    else {
        result.IsVisible = false;
    }
}

我猜result.IsVisible是一个布尔值

如果以下条件为真,则为真: obj1.status.abc_报告==“Y” 和 obj1.AnotherValue.ToBoolean()==false


此外,a==b必须为true才能输入初始值if

我猜结果是。IsVisible是一个布尔值

如果以下条件为真,则为真: obj1.status.abc_报告==“Y” 和 obj1.AnotherValue.ToBoolean()==false

此外,如果要逐行输入初始值,a==b必须为真:

  if(a==b)
如果a的值等于b的值,则执行以下行

 result.IsVisible = obj1.status.abc_REPORT == 'Y'
        && obj1.AnotherValue.ToBoolean() == false;
结果是某个对象(可能是winforms控件等)具有一个属性IsVisible,如果obj1.status.abc_REPORT等于“Y”,则将其设置为true,并且obj1.AnotherValue.ToBoolean()等于false

让我们一行一行走:

  if(a==b)
如果a的值等于b的值,则执行以下行

 result.IsVisible = obj1.status.abc_REPORT == 'Y'
        && obj1.AnotherValue.ToBoolean() == false;


结果是某个对象(可能是winforms控件等)具有一个属性IsVisible,如果obj1.status.abc_REPORT等于“Y”,则将其设置为true,并且obj1.AnotherValue.ToBoolean()等于false

取决于obj1.status.abc_REPORT和obj1.anothervalues的值。我有强烈的冲动要说“真”或“假”。取决于obj1.status.abc_REPORT和obj1.anothervalues的值。我有强烈的冲动要说“真”或“假”。很好的重构-比原始代码更清晰,我认为你是想写if(a==b)而不是if(a=b)真不错,约翰。这就是为什么编写结构合理且易于理解的代码是如此重要的原因。下面的Skeet示例(我相信很快就会超过这个示例)会更好,因为它比较短。这是更明确的说明。另外,请注意,我不写这样的代码,也不赞成使用这个例子。:)我喜欢我的扩展的原因是因为它与编译器所做的事情更加匹配——编译器有效地使用一个临时变量来计算RHS的值,并使用一个赋值来表示IsVisible。您的版本将“我们对结果做了什么”的概念与“如何找到结果”的代码混合在一起。这只是个人偏好。重构很好-比原始代码更清晰,我认为您的意思是编写if(a==b)而不是if(a=b)真的很好@John。这就是为什么编写结构合理且易于理解的代码是如此重要的原因。下面的Skeet示例(我相信很快就会超过这个示例)会更好,因为它比较短。这是更明确的说明。另外,请注意,我不写这样的代码,也不赞成使用这个例子。:)我喜欢我的扩展的原因是因为它与编译器所做的事情更加匹配——编译器有效地使用一个临时变量来计算RHS的值,并使用一个赋值来表示IsVisible。您的版本将“我们正在对结果做什么”的概念与“如何发现结果”的代码混合在一起。这只是个人偏好。我猜他不明白切换行上的布尔值的比较是可见的。谢谢,是的,我被&&运算符搞糊涂了,对我来说,这是一个例子,仅仅因为你可以在一行上写东西并不意味着你应该这样做。。。你觉得怎么样?写代码的时候就好像下一个读代码的人是一个知道你住在哪里的精神病杀手。@Paul:我觉得用大括号就可以了。&&运算符是一个非常常见的运算符-我希望大多数C#开发人员会发现该版本比我将其扩展为嵌套if块更容易理解。是的&&并且缺少括号,我认为如果是这样的结果。IsVisible=(obj1.status.abc#u REPORT='Y')&(!obj1.An)