C# 条件语句中不相等的通用代码约定

C# 条件语句中不相等的通用代码约定,c#,conditional,coding-style,C#,Conditional,Coding Style,我遇到了不平等的=或!自从我开始编程以来,条件语句中的条件。也许这是因为我的大脑在英语中有一个先决条件,即过度思考多重否定。但我一直在想,在评估条件语句中的true时,是否有一个共同的开发社区接受的实践?或者更确切地说,我有时的看法是:评估是否正确 在中可能有例外=不能完全不可避免吗 例如: 这可能是一个非常简单和琐碎的问题,但这是首选的吗 string myStringVar = "dogs"; if (myStringVar != "dogs") //In my mind, "False

我遇到了不平等的
=
!自从我开始编程以来,条件语句中的条件
。也许这是因为我的大脑在英语中有一个先决条件,即过度思考多重否定。但我一直在想,在评估条件语句中的true时,是否有一个共同的开发社区接受的实践?或者更确切地说,我有时的看法是:评估是否正确

中可能有例外=不能完全不可避免吗

例如:

这可能是一个非常简单和琐碎的问题,但这是首选的吗

string myStringVar = "dogs";


if (myStringVar != "dogs") //In my mind, "False this is not true"
{
     //code
}
else if (myStringVar != cats) //In my mind, "True this is false"
{
     //code
}
还是这更可取

if (myStringVar == "dogs")
{
     //"True"
}
else if (myStringVar == "cats")
{
     //"False"
}
然后是

bool MyBoolMethod()
{
     return false;
}


if (!MyBoolMethod()) // True this method does not return true
{
     //code
}
这是一个非常简单的示例,我只想知道如何编写可读的、可维护的代码。其他人读这样的条件句有困难吗?还是只有我一个人?

“以上都没有。”

由于您使用的是
string
s,因此假设
myStringVar
可以是任何东西。如果我说:

string myStringVar = "Aardvark";
然后,您的第一个示例将运行
myStringVar!=“狗”
代码部分;在第二个示例中,两者都不会执行。所以它们不是等价的代码片段

它们等价的唯一方法是使用enum(在这种情况下,我建议使用
case
语句)

在第三个示例中,它取决于
MyBoolMethod()
的名称,以及未来的程序员理解它的容易程度。举个例子,

bool isDog()
{
  return false;
}
这很容易理解。问题就变成了

if(!isDog()) ...

if(isNotDog()) ...
我认为第一个比第二个更清楚。但是,在其他情况下,情况并非如此。

“上述情况均不存在。”

由于您使用的是
string
s,因此假设
myStringVar
可以是任何东西。如果我说:

string myStringVar = "Aardvark";
然后,您的第一个示例将运行
myStringVar!=“狗”
代码部分;在第二个示例中,两者都不会执行。所以它们不是等价的代码片段

它们等价的唯一方法是使用enum(在这种情况下,我建议使用
case
语句)

在第三个示例中,它取决于
MyBoolMethod()
的名称,以及未来的程序员理解它的容易程度。举个例子,

bool isDog()
{
  return false;
}
这很容易理解。问题就变成了

if(!isDog()) ...

if(isNotDog()) ...

我认为第一个比第二个更清楚。然而,也有其他情况并非如此。

平等和不平等只是人们需要在环境中适应和选择的东西。如果逻辑问题要求根据相等性进行测试,则使用相等性,如果逻辑问题要求取消资格,则使用不等性

可读性和可维护性可以通过良好的设计得到加强,正如您开始使用mybool方法所提到的那样

Exmaple

公共类动物
{
公共静态枚举AnimalType
{
狗,
猫
}  
私有动物型;
公共动物(枚举动物类型)
{
AnimalType=_AnimalType;
}
公共布尔类型(枚举动物类型)
{
返回_animalType==type?真:假;
}
}
公共someothermethod()
{
//做包容
If(MyAnmialObject.isOfType(动物、动物、狗))
{
//如果类型匹配
}
//排除
If(!MyAnmialObject.isOfType(Animal.AnimalType.Dog))
{
//如果类型不匹配
}
}

你仍然需要习惯不平等,但你知道它是在检查isOfType和命名类型。

平等和不平等只是人们需要熟悉并在上下文中选择的东西。如果逻辑问题要求根据相等性进行测试,则使用相等性,如果逻辑问题要求取消资格,则使用不等性

可读性和可维护性可以通过良好的设计得到加强,正如您开始使用mybool方法所提到的那样

Exmaple

公共类动物
{
公共静态枚举AnimalType
{
狗,
猫
}  
私有动物型;
公共动物(枚举动物类型)
{
AnimalType=_AnimalType;
}
公共布尔类型(枚举动物类型)
{
返回_animalType==type?真:假;
}
}
公共someothermethod()
{
//做包容
If(MyAnmialObject.isOfType(动物、动物、狗))
{
//如果类型匹配
}
//排除
If(!MyAnmialObject.isOfType(Animal.AnimalType.Dog))
{
//如果类型不匹配
}
}

你仍然需要习惯不等式,但你知道它正在检查isOfType和命名类型。

我读了
(myStringVar!=“dogs”)
,因为
myStringVar
不等于
“dogs”
。也就是说,条件不应该是个问题,也许这就是我的问题;有时在调试或编写代码时,我会想象要分配的变量。在更复杂的情况下,我似乎混淆了
notequal
equal
之间的区别,上面的第一个if-else-if结构肯定很糟糕。这种逻辑应该检查具体情况。逻辑的两个分支可以捕捉到属于这两种逻辑结构的场景。在这种情况下检查是否相等肯定会更好。这几乎完全取决于你想做什么。当然,您应该避免双重否定,例如,让一个名为
notFound
的布尔变量从true开始,然后在找到问题时设置为false。最好是找到一个
变量,该变量以false开头,找到后设置为true。我读到
(myStringVar!=“dogs”)
,因为
myStringVar
是no