2015-10-03 86 views
1

我想在列表后面添加新项目并获取新创建的项目。在列表中创建默认项目并返回新项目

让我们假设,我们可以为一个时刻做这样的事情:

class Temp 
{ 
    public string First { get;set;} 
    public string Second { get;set;} 
} 
List<string> list = new List<string>(); 
var newItem = list.Push(); 
newItem.First="asd"; 
newItem.Second = "qwe; 

这将是更容易比

var newItem = new Temp(); 
newItem.First="asd"; 
newItem.Second = "qwe; 
list.Add(newItem); 

尤其是当我不能使用自动属性。

这可能吗?

+2

是没有意义的,你是问。请更清楚。你可以通过使用列表的插入方法并给它索引来插入 –

回答

0

您可以使用对象初始化:

var list = new List<Temp>(); 
list.Add(new Temp{ First = "abc", Second = "def" }); 

或连同一个集合初始化:

var list = new List<Temp> { new Temp{ First = "abc", Second = "def" } }; 

这将打开你的四个衬垫成一行。

或者一个以上的条目:

var list = new List<Temp> { 
    new Temp{ First = "abc", Second = "def" }, 
    new Temp{ First = "ghi", Second = "jkl" }, 
    new Temp{ First = "mno", Second = "pqr" } 
}; 

它当然应该是一个Temp列表,而不是的string列表。

0

除非您实现自己的List类型并添加Push方法,否则唯一的方法是如果List中的T可以使用无参数构造函数构造。

这是一个扩展方法。

这不是建议的,但是是你的问题的答案。

沿东西这行 - 我没有编译或运行这段代码

public static class ListEx { 
    public static T Push<T>(this List<T> list) where T: new() { 
    // Create an instance of T. 
    var instance = new T(); 
    // Add it to the list. 
    list.Add(instance); 
    // Return the new instance. 
    return instance; 
    } 
} 
+0

,或者你可以简单地用'new T()'创建一个实例。请参阅:http://stackoverflow.com/a/11234485/880990 –

+0

噢,那么你去:D – Jeff