none
.NET Framework: Недокументированная фича инициализаторов C#? Где доку на это посмотреть? RRS feed

  • Вопрос

  • Люди, помогите найти доку на следующий интересный случай!
    Я порылся и ничего не нашел в MSDN, а навел меня на него Решарпер.
    Это относиться к .NET Framework 3.5 и длалее.
     
    Оказывается запись

     

    var classLevelOne = new ClassLevelOne
    {
        PropClassLevelTwoInOne =
        {
            ClassLevelThreeInTwo =
    new ClassLevelThree()
        }
    };

     

    Не тоже самое, что запись
    var classLevelOne = new ClassLevelOne
    {
        PropClassLevelTwoInOne = new PropClassLevelTwo
        {
            ClassLevelThreeInTwo =
    new ClassLevelThree()
        }
    };
    Первая запись говорит о том, что в объекте класса ClassLevelOne нужно взять существующий объект из свойтсва PropClassLevelTwoInOne, а не заменить новым, как во втором случае, и присвоить свойству ClassLevelThreeInTwo новый объект.
     
    Я был немного шокирован, но дебаггинг не дал соврать, потому что выпадает исключение, если свойтсво PropClassLevelTwoInOne ссылается на null.
     
    Вот полный код для консольного приложения:
    _________________________________ 
    namespace ConsoleApplication1
    
    {
    
    	class Program
    
    	{
    
    		static void Main(string[] args)
    
    		{
    
    			var classLevelOne = new ClassLevelOne
    
    			{
    
    				PropClassLevelTwoInOne =
    
    					{
    
    						ClassLevelThreeInTwo = new ClassLevelThree()
    
    					}
    
    			};
    
    		}
    
    
    
    	}
    
    
    
    	internal class ClassLevelOne
    
    	{
    
    		private ClassLevelTwo _propClassLevelTwoInOne;
    
    		public ClassLevelTwo PropClassLevelTwoInOne
    
    		{
    
    			get
    
    			{
    
    				return _propClassLevelTwoInOne;
    
    			}
    
    			set
    
    			{
    
    				_propClassLevelTwoInOne = value;
    
    			}
    
    		}
    
    	}
    
    
    
    	internal class ClassLevelTwo
    
    	{
    
    		private ClassLevelThree _classLevelThreeInTwo;
    
    		public ClassLevelThree ClassLevelThreeInTwo
    
    		{
    
    			get
    
    			{
    
    				return _classLevelThreeInTwo;
    
    			}
    
    			set
    
    			{
    
    				_classLevelThreeInTwo = value;
    
    			}
    
    		}
    
    	}
    
    
    
    	internal class ClassLevelThree
    
    	{
    
    		
    
    	}
    
    	
    
    }
    
    
    
    
    _____________________________________ 
    Чего-то я упустил в жизни :)
    • Изменено Ilya Tretyakov it3xl 8 июня 2010 г. 15:25 Причина - фигово видно
    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:55 MSDN Forums consolidation (От:Visual C#)
    8 июня 2010 г. 15:23

Ответы