C# C中结构的空比较、前缀增量、属性、长度属性#
我有一些C语言的问题#C# C中结构的空比较、前缀增量、属性、长度属性#,c#,properties,comparison,null,C#,Properties,Comparison,Null,我有一些C语言的问题# null比较null==value和value==null之间有什么区别(value是任何类型的变量:int、string、float等) 我听说在某些情况下,使用前缀increment++I代替I++将提高程序性能。为什么会这样 我有一段代码,如下所示: private int _number; public int Number { get { return _number} set { _n
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;
}
}
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属性将返回什么
有人愿意启发我吗?
提前感谢1:没有,除非您使用params
x
/y
定义了自定义相等运算符,在这种情况下,在一个示例中x
为null,在另一个示例中y
为null
2:不是用C#
3:两者均不使用int
从不为空;只需返回2.2代码>-但从历史上看,在C/C++中,最好使用null==val
来避免错误键入错误null=val
;在C#中,这种类型很少(但有时)编译,因此问题不大val==null
在C语言中更清晰、更常见#
4:除非您提供减法运算符,否则它不会编译,在这种情况下,它返回的内容由您的运算符定义
在大多数情况下,这不会有任何区别。这应该没什么区别。如果有人严重重载==运算符,则可能会这样做。我个人更喜欢如果(x==null)
当你听到这类事情时,你应该询问细节。在某些情况下,它可能会有所不同(至少在过去,在C语言中是这样),但是当它被单独用作一个语句时,它是完全不相关的——使用你认为更可读的语句。当以副作用的方式使用时(例如,作为方法参数),可能会有非常微小的差异——但它永远不可能是显著的
在这种情况下,使用属性还是局部变量没有区别。在其他一些情况下,它可能会有所不同,具体取决于属性中的代码。将int
与null
进行比较总是会得到false
的结果,因此总是返回2.2
此时您的代码将无法编译-您需要在向量中重载-
运算符才能使其工作,此时行为将取决于-
运算符中的代码。长度属性也是如此
2) 如果你不知道这两者之间的区别,可以通过跑步来观察
static void Main(string[] args)
{
int i = 1;
Console.WriteLine(i++);
i = 1;
Console.WriteLine(++i);
Console.Read();
}
其中:
1
2
你应该单独问这些问题。通常,你问的每个“问题”最好有一个问题。。。