null比较,前缀增量,属性,C#中struct的Length属性

时间:2010-01-02 20:02:51

标签: c# properties comparison null

我在C#中有一些问题

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

  2. 我听说在某些情况下使用前缀增量++ i代替i ++会提高程序性能。为什么会这样?

  3. 我的代码如下:

        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. 问题是为什么我们在这里使用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属性将返回什么?

    有人愿意开导我吗? 提前谢谢

3 个答案:

答案 0 :(得分:6)

  1. 在大多数情况下,它不会有任何区别。它不应该有任何区别。如果某人严重超载了==运算符,它可能会。我个人更喜欢if (x == null)

  2. 当你听到这种事情时,你应该询问具体细节。在某些情况下,它可以产生差异(至少在过去,在C中),但当它作为一个声明本身使用它完全无关紧要时 - 使用你发现的更具可读性。当以副作用的方式使用时(例如作为方法参数),可能存在微小的微小差异 - 但它永远不可能是显着的。

  3. 在这种情况下,使用属性还是局部变量没有区别。在其他一些情况下,它可能会有所不同,具体取决于属性中的代码。将intnull进行比较总是会得到false的结果,因此将始终返回2.2。

  4. 您的代码目前无法编译 - 您需要重载-中的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