2013-05-15 2 views
4

Недавно я преобразовал справедливый бит кода с VB на C#, и я заметил, что в VB вы можете инициировать новый obj, используя сокращенное обозначение, возможно ли это на C# или вам нужно использовать фоновое поле.Можете ли вы определить «новое» свойство, используя короткую руку?

Public Property MyList As New List(Of String) 

Оказывается, что C# эквивалент:

private List<String> _myList = new List<string>(); 
public List<String> MyList 
{ 
    get { return _myList; } 
    set { _myList = value; } 
} 

Примечание * Боль выписывая это можно сделать гораздо проще с помощью команды быстрого доступа 'propfull'

+1

Короткий ответ: Нет, прямой перевод с этой строки на C# отсутствует, вы не можете инициализировать и определить свойство в той же строке. – qJake

+0

Это может быть дубликат, хотя он не упоминает VB.NET: [Инициализация авто-свойств C#] (http://stackoverflow.com/questions/169220/initializing-c-sharp-auto-properties) –

+0

@TimSchmelter Согласен , но, вероятно, не следует закрывать как обман, потому что этот вопрос касается миграции VB на C#, тогда как этого нет. – qJake

ответ

5

Вы не можете создать свойство в C# и инициализировать его одновременно. Вы можете делать это только с полями.

Это справедливо, но не инициализировать значение (MyList будет null):

public List<string> MyList { get; set; } 

Это справедливо (но это поле, а не собственность):

public List<string> MyList = new List<string>(); 

Это не действует:

public List<string> MyList { get; set; } = new List<string>(); 

Обычно создается свойства внутри классов, а затем инициализируются в конструкторе этого класса.


Update: Это теперь действует синтаксис в C# 6.0.

+1

Это действительно в C# 6.0 :) – nawfal

8

C# эквивалент?

C# также поддерживает auto-implemented properties, который не требует поле подложки, но не автоматически присваивает значение этого свойства:

public List<string> MyList { get; set; } 

Компилятор будет излучать соответствующее поле подложки. Кроме того, можно задать различные модификаторы доступа для вашего геттер и сеттер:

public List<string> MyList { get; private set; } 

И если вы хотите, чтобы создать экземпляр свойства в то же время с помощью этого авто недвижимость, то нет, это невозможно, но вы можете сделать это в конструктор класса:

public class MyClass 
{ 
    public MyClass() 
    { 
     this.MyList = new List<string>(); 
    } 

    public List<string> MyList { get; set; } 
} 
-1

в C# просто сделать:

public List<string> MyList { get; set; } 
+1

Это не 'новый' вверх по списку автоматически, как код OP. –

Смежные вопросы