[英]null comparison, prefix increment, properties, Length properties of struct in C#
我在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,将返回什么? 而struct的Length属性将返回什么?
有人愿意启发我吗? 预先感谢
在大多数情况下,它没有任何区别。 它应该没有任何区别。 如果有人严重==运算符重载,则可能会这样做。 我个人更喜欢if (x == null)
。
听到这种声音时,您应该询问具体信息。 在某些情况下,它可能会有所作为(至少在过去的C语言中是这样),但是当将它单独用作语句时,则完全无关紧要-使用更易读的内容。 当以副作用的方式使用时(例如,作为方法参数),可能会有微小的差异,但是这种差异永远不会很大。
在这种情况下,使用属性还是使用局部变量都没有区别。 在其他情况下,可能会有所不同,具体取决于属性中的代码。 尽管将int
与null
比较总是会false
的结果,所以将始终返回2.2。
目前,您的代码无法编译-您需要在Vector
重载-
运算符才能使其正常工作,这时的行为将取决于-
运算符中的代码。 Length属性也是如此。
1:什么都没有,除非您已使用参数x
/ y
定义了一个自定义相等运算符,在这种情况下,一个示例x
为空,而另一个y
为空
2:不在C#中
3:都不使用; int
永远不会为null; 只需return 2.2;
-但历史上看 ,在C / C ++的null == val
优选避免打字错误错误null = val
; 在C#中,这种类型很少 (但有时)会编译,因此问题不大。 val == null
更清晰,IMO在C#中更常见
4:除非提供减法运算符,否则不会编译,在这种情况下,它返回的内容由运算符定义
2)如果您不知道可以通过运行看到两者之间的差异
static void Main(string[] args)
{
int i = 1;
Console.WriteLine(i++);
i = 1;
Console.WriteLine(++i);
Console.Read();
}
这使:
1
2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.