2013-05-15 66 views
4

我一直在从VB转换最近的一段代码到C#,我注意到在VB中可以使用简写启动一个新的obj,这是可能的在C#中,或者你必须使用后台字段。你可以用短手定义一个'新'属性吗?

Public Property MyList As New List(Of String) 

看来,C#相当于是:通过使用快捷命令 '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#财产并在同一时间初始化它。你只能用字段来做到这一点。

这是有效的,但会初始化值(MyListnull):

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

这是有效的(但它是一个场,而不是一个属性):

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

这是不是有效:

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

通常在类中创建属性,然后在该类的构造函数中初始化它们。


更新:这是C# 6.0现在有效的语法。

+1

这在C#6.0中有效:) – nawfal

8

C#

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

注*写出这样的疼痛可变得容易得多当量?

C#还支持auto-implemented properties不需要支持字段,但不值自动分配给此属性:

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

编译器将发出相应的支持字段。你也可以指定你的getter和setter不同的访问修饰符:

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的代码确实如此。 –

相关问题