我在C#中有一些问题
null比较之间有什么区别null == value和value == null(value是任何类型的变量:int,string,float,...)
我听说在某些情况下使用前缀增量++ i代替i ++会提高程序性能。为什么会这样?
我的代码如下:
private int _number;
public int Number
{
get { return _number}
set { _number = value}
}
public double Test
{
get
{
if (null == Number)
return 1.1;
else
return 2.2;
}
}
问题是为什么我们在这里使用null == Number但不是null == _number或Number == null或_number == null
4. if I have a struct as follow:
public struct Vector
{
public double X;
public double Y;
public Vector(double x, double y)
{
X = x;
Y = y;
}
}
public class Test
{
public Vector Position;
public void StructLength(Test t2)
{
Vector v = this.Position - t2.Position;
if (v.Length > 10)
return false;
}
}
如果我们减去上面的2个结构,那么将返回什么? struct的Length属性将返回什么?
有人愿意开导我吗? 提前谢谢
答案 0 :(得分:6)
在大多数情况下,它不会有任何区别。它不应该有任何区别。如果某人严重超载了==运算符,它可能会。我个人更喜欢if (x == null)
。
当你听到这种事情时,你应该询问具体细节。在某些情况下,它可以产生差异(至少在过去,在C中),但当它作为一个声明本身使用它完全无关紧要时 - 使用你发现的更具可读性。当以副作用的方式使用时(例如作为方法参数),可能存在微小的微小差异 - 但它永远不可能是显着的。
在这种情况下,使用属性还是局部变量没有区别。在其他一些情况下,它可能会有所不同,具体取决于属性中的代码。将int
与null
进行比较总是会得到false
的结果,因此将始终返回2.2。
您的代码目前无法编译 - 您需要重载-
中的Vector
运算符才能使其正常工作,此时行为将取决于代码在-
运算符中。对于Length属性也是如此。
答案 1 :(得分:5)
1:没有,除非你用params x
/ y
定义了一个自定义相等运算符,在这种情况下,x
中的y
为空,在另一个int
中}是null
2:不在C#中
3:不使用; return 2.2;
永远不会为空;只是null == val
- 但历史,在C / C ++中,null = val
是首选,以避免错误类型错误val == null
;在C#这个类型很少(但有时)编译,所以它不是一个问题; {{1}}更清晰,IMO在C#中更常见
4:除非你提供减法运算符,否则不会编译,在这种情况下,它返回的是由运算符定义的
答案 2 :(得分:0)
2)两者之间的区别,如果您不知道可以通过运行
看到 static void Main(string[] args)
{
int i = 1;
Console.WriteLine(i++);
i = 1;
Console.WriteLine(++i);
Console.Read();
}
给出了:
1
2