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