我最近已经将一些代码从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'
可以更轻松地写出这个的痛苦答案 0 :(得分:8)
等效的C#?
C#还支持auto-implemented properties
,它不需要支持字段,但不会自动为此属性赋值:
public List<string> MyList { get; set; }
编译器将发出相应的后备字段。您还可以为getter和setter指定不同的访问修饰符:
public List<string> MyList { get; private set; }
如果你想使用这个auto属性同时实例化属性,那么,不,这是不可能的,但是你可以在类的构造函数中做到这一点:
public class MyClass
{
public MyClass()
{
this.MyList = new List<string>();
}
public List<string> MyList { get; set; }
}
答案 1 :(得分: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>();
在类中创建属性然后在该类的构造函数中初始化它们是很常见的。
更新:现在这是C# 6.0中的有效语法。
答案 2 :(得分:-1)
在C#中只需:
public List<string> MyList { get; set; }