Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能定义一个';新';物业使用速记?_C#_Vb.net - Fatal编程技术网

C# 你能定义一个';新';物业使用速记?

C# 你能定义一个';新';物业使用速记?,c#,vb.net,C#,Vb.net,我最近一直在将相当多的代码从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;

我最近一直在将相当多的代码从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; }
}
private List\u myList=new List();
公共列表列表
{
获取{return\u myList;}
设置{u myList=value;}
}
注意*通过使用快捷命令“propfull”,写出来的痛苦会变得容易得多

C#等价物

C#还支持不需要支持字段但不会自动为此属性赋值的属性:

public List<string> MyList { get; set; }
public List<string> MyList = new List<string>();
public List MyList{get;set;}
编译器将发出相应的支持字段。您还可以为getter和setter指定不同的访问修饰符:

public List<string> MyList { get; private set; }
public List MyList{get;private set;}
如果您想同时使用这个自动属性实例化属性,那么,不,这是不可能的,但是您可以在类的构造函数中完成:

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

    public List<string> MyList { get; set; }
}
公共类MyClass
{
公共MyClass()
{
this.MyList=新列表();
}
公共列表MyList{get;set;}
}
在C#中,只需执行以下操作:

public List<string> MyList { get; set; }
public List MyList{get;set;}
不能在C#中创建属性并同时对其进行初始化。只能对字段执行此操作

这是有效的,但不会初始化值(
MyList
将为
null
):

public List MyList{get;set;}
这是有效的(但它是字段,不是属性):

public List MyList=new List();
这是无效的:

public List<string> MyList { get; set; } = new List<string>();
public List MyList{get;set;}=new List();
通常在类中创建属性,然后在该类的构造函数中初始化它们



更新:这现在是中的有效语法。

这不会像OP的代码那样自动将列表上移到
new
中。简短回答:不,这一行没有直接翻译成C#,您不能在同一行上初始化和定义属性。这可能是重复的,尽管它没有提到VB.NET:@TimSchmelter同意,但可能不应该作为重复关闭,因为这个问题涉及VB到C的迁移,而那个问题不涉及。可能的重复在C#6.0:中有效)
public List<string> MyList { get; set; } = new List<string>();