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”可以更轻松地写出此内容

4

3 回答 3

8

C#等价物?

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; }
}
于 2013-05-15T15:44:28.110 回答
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中的有效语法。

于 2013-05-15T15:46:03.500 回答
-1

在 C# 中只需执行以下操作:

public List<string> MyList { get; set; }
于 2013-05-15T15:44:56.337 回答