我一直在从VB转换最近的一段代码到C#,我注意到在VB中可以使用简写启动一个新的obj,这是可能的在C#中,或者你必须使用后台字段。你可以用短手定义一个'新'属性吗?
Public Property MyList As New List(Of String)
看来,C#相当于是:通过使用快捷命令 'propfull'
我一直在从VB转换最近的一段代码到C#,我注意到在VB中可以使用简写启动一个新的obj,这是可能的在C#中,或者你必须使用后台字段。你可以用短手定义一个'新'属性吗?
Public Property MyList As New List(Of String)
看来,C#相当于是:通过使用快捷命令 'propfull'
您不能创建在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>();
通常在类中创建属性,然后在该类的构造函数中初始化它们。
更新:这是C# 6.0现在有效的语法。
这在C#6.0中有效:) – nawfal
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; }
}
在C#中简单地做:
public List<string> MyList { get; set; }
这不会'自动'新列表,就像OP的代码确实如此。 –
简答:不,没有直接从这行转换到C#,你不能初始化和定义属性在同一行。 – qJake
这可能是重复的,虽然它没有提到VB.NET:[初始化C#自动属性](http://stackoverflow.com/questions/169220/initializing-c-sharp-auto-properties) –
@TimSchmelter同意,但可能不应该作为一个愚蠢的关闭,因为这个问题的VB到C#迁移,而那一个没有。 – qJake