C# C语言中正向比较和反向比较的区别#

C# C语言中正向比较和反向比较的区别#,c#,comparison,C#,Comparison,这与比较C#中的值有关 基本上默认情况下,在C#till date中,我只使用了如下前瞻性比较: string value1 = ""; if (value1 == null) { Console.WriteLine("True"); } else { Console.WriteLine("False"); } 在互联网上的某个地方,我看到一个链接,上面说,在比较C#中的值时,我们应该更喜欢反向比较,因为: string value1 = ""; if (n

这与比较C#中的值有关

基本上默认情况下,在C#till date中,我只使用了如下前瞻性比较:

string value1 = "";

if (value1 == null) 
{ 
    Console.WriteLine("True"); 
} 
else 
{ 
    Console.WriteLine("False"); 
} 
在互联网上的某个地方,我看到一个链接,上面说,在比较C#中的值时,我们应该更喜欢反向比较,因为:

string value1 = "";

if (null == value1)  
{ 
    Console.WriteLine("True"); 
} 
else 
{ 
    Console.WriteLine("False"); 
} 
现在的问题是,这两种比较值的方法是否有任何基本区别(即两者相同)

寻找有利的答复


谢谢

当您使用
==
(比较)而不是
=
(分配)时,反向比较可以防止出现错误。但如果您这样做,编译器也会发出警告。

当您使用
==
(比较)而不是
=
(分配)时,反向比较可以防止错误。但编译器也会警告您,如果您这样做。

这是值隐式转换为布尔类型的语言的遗留问题

在大多数情况下,任何非
null
或非
0
的内容都将被视为
true
,否则就等同于
false
。这意味着常数的任何赋值总是

这里需要记住的是,赋值函数返回赋值,与
5
2+3
的结果非常相似,
myInt=5
也返回
5

因此,建议您对照常量检查变量。在这种情况下,
null
示例实际上可能有点做作,因为在大多数语言中,它会返回false

例如:

if(i = 1)
{
    printf("Always out\n");
}
else
{
    printf("Never prints\n");
}
i
被赋值为
1
,然后将赋值值
1
返回到
if
语句。这相当于
true
,如果
条件匹配,则为

如果试图将
i
赋值给常量
1
,则不会进行编译,因此建议按顺序执行操作(例如
1==i


这在C#中并不是必需的,而且在您的示例中,建议的做法是调用
if(String.IsNullOrEmpty(myStringValue)){/..}
,因为字符串具有。。。二从语义角度看默认值。

这是语言的遗留问题,在这些语言中,值被隐式转换为布尔类型

在大多数情况下,任何非
null
或非
0
的内容都将被视为
true
,否则就等同于
false
。这意味着常数的任何赋值总是

这里需要记住的是,赋值函数返回赋值,与
5
2+3
的结果非常相似,
myInt=5
也返回
5

因此,建议您对照常量检查变量。在这种情况下,
null
示例实际上可能有点做作,因为在大多数语言中,它会返回false

例如:

if(i = 1)
{
    printf("Always out\n");
}
else
{
    printf("Never prints\n");
}
i
被赋值为
1
,然后将赋值值
1
返回到
if
语句。这相当于
true
,如果
条件匹配,则为

如果试图将
i
赋值给常量
1
,则不会进行编译,因此建议按顺序执行操作(例如
1==i


这在C#中并不是必需的,而且在您的示例中,建议的做法是调用
if(String.IsNullOrEmpty(myStringValue)){/..}
,因为字符串具有。。。二从语义角度来看,默认值。

就个人而言,(null==value1)读起来非常困难。@JTA:有些人只是遵循“最佳实践”,即使他们不知道为什么;-)As的可能重复,我们使用
int i=1;j=2
因此,如果(i==1)
个人(null==value1)读起来非常困难,那么很容易遵循相同的模式。@JTA:有些人只是遵循“最佳实践”,即使他们不明白为什么;-)As的可能重复,我们使用
int i=1;j=2
对于c,那么很容易遵循相同的模式
,这只对布尔人是正确的,imho。你绝对是对的,但有时会发生:
while(someWorker.Status=true){/…}
)while(boolVar){/…}
vs
while(boolVar==true){/…}
是正义之路。编译不会警告你,如果没有对bool进行隐式转换,它将无法编译并出现错误。对于c#,这只对booleans是正确的,imho。你绝对正确,但有时会发生:
while(someWorker.Status=true){/…}
)while(boolVar){/…}
vs.
while(boolVar==true){/…}
是正义之路。编译不会警告您,如果没有对bool进行隐式强制转换,它将无法编译并出现错误。C#允许您在if条件内赋值(
if((i=1)==1)
是无用的,但可以编译)。但是,只有布尔值可以直接用作条件,因此在C#中,布尔值只有(很少)出现这种错误。@Matthew Flaschen-你说得很对。发生这种行为是因为赋值的返回值本身就是实际值。我将更新我的答案,使之更清楚:)。事实上,我提出这个问题只是为了知道这种反向比较或正向比较是否与绩效或效率有关,仅此而已。相反的比较很难理解,这也是事实。@Everest-不,AFAIK没有性能优势,我不知道怎么会有。即使这样做比较更有效,我相信编译器也会切换顺序