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

我有一些C语言的问题#

  • null比较null==value和value==null之间有什么区别(value是任何类型的变量:int、string、float等)

  • 我听说在某些情况下,使用前缀increment++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==\u Number或Number==null或\u 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属性将返回什么

    有人愿意启发我吗?
    提前感谢

    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
    

    你应该单独问这些问题。通常,你问的每个“问题”最好有一个问题。。。