-1

I've the following class

MyClass
{

    public int Id {get;set;}
    public string Name {get;set;}
    public List<string> FriendNames {get;set;} 

    public MyClass()
    {
       FriendNames = new List<string>();
    }
}

Is it correct to initialise the List like I've done or should it be

this.FriendNames = new List<string>;

Is there any difference ?

Then in my code I can create a instance like

MyClass oMyClass = new MyClass();
oMyClass.Id = 1;
oMyClass.Name = "Bob Smith";
oMyClass.FriendNames.Add("Joe King");
4

7 回答 7

0

你可以这样做。

    private List<string> list = new List<string>();

    public List<string> List
    {
        get { return list; }
        set { list = value; }
    }
于 2013-11-13T17:29:59.523 回答
0

没有真正的区别。所以归结为偏好。

有些人喜欢,因为它非常明确和自我评论。其他人则认为它使代码混乱。

重要的是您要List在构造函数中实例化 。太多人忘记做的事情。

这个 SO question 中接受的答案有一个很好的列表,说明何时使用this关键字

你什么时候使用“this”关键字?

于 2013-11-13T17:28:54.673 回答
0

它应该是

FriendNames = new List<string>();

或者

FriendNames = new List<string>(123456);

如果您在初始化之前知道容量。

于 2013-11-13T17:29:19.910 回答
0

实例化列表应该类似于

FriendNames = new List<string>();

如果您询问是否this需要,如果您的构造函数获取了一个列表,FriendNames使得您的意思有歧义,那么您必须使用this来指示您要将其分配给对象的实例。

public MyClass(List<String> FriendNames)
{
   this.FriendNames = FriendNames;
}
于 2013-11-13T17:33:40.643 回答
0

如果您正在使用this.FriendNames = new List<string>;,您第一眼就会发现这是一个类变量。

特别是在具有许多变量的大型类中,这可能是一个优势,因为您可以更轻松/更快地将类变量与局部变量区分开来。

但是正如这里的许多其他人所说,这取决于您的喜好。

如果你有一个类和一个同名的局部变量,这变得很重要,如下所示:

MyClass
{
    public List<string> FriendNames {get;set;} 

    public SetMyList(List<string> FriendNames)
    {
       this.FriendNames = FriendNames;
    }
}

在这种情况下,您必须使用this-keyword.

于 2013-11-13T17:35:18.230 回答
0

这与仅当您拥有与您的属性名称相同的变量时才会计数this.FriendNames = new List<string>;的完全相同。FriendNames = new List<string>; this

像这儿:

public MyClass(List<string> FriendNames)
{
    this.FriendNames = FriendNames; // here we have to specify which FriendNames is from this class
}

构造函数是用来初始化一些资源的,所以初始化你的列表是个好主意。

您可以使用名称和 id 创建构造函数(如果您总是分配它们)

public MyClass(string name, int id)
{
   FriendNames = new List<string>();
   Name = name;
   Id = id;
}

并将您的代码更改为:

MyClass oMyClass = new MyClass("Bob Smith", 1);
oMyClass.FriendNames.Add("Joe King");
于 2013-11-13T17:35:54.303 回答
0

使用它来初始化你的类的一个实例

var x = new MyClass { Id = 1, Name = "Steve", 
            FriendNames = { "John", "Paul", "Ringo", "George" } };

而且一般不要使用“this”。参考文献,我很少看到它以这种方式使用(通常我通过在私有字段前加上“_”来使用代码中留下的任何匈牙利符号的唯一残余,所以至少

public void DoSomething();
{
   _myInt = 123;
}
private int _myInt;
public int MyInt { get { return _myInt; } }

意味着我知道发生了什么,但我确信外面的人不会喜欢“_”。

于 2013-11-13T17:38:55.007 回答