2009-12-21 181 views
1

说我有2个属性如何使用lambda将类列表对象添加到类中?

class TestClass 
{ 
    public int propertyOne {get;set;} 
    public List<int> propertyTwo {get; private set;} 
    public TestClass() 
    { 
     propertyTwo = new List<int>(); 
    } 
} 

使用LINQ,我想如下创建的TestClass列表的类:

var results = from x in MyOtherClass 
       select new TestClass() 
       { 
        propertyOne = x.propertyFirst, 
        propertyTwo = x.propertyList 
       }; 

propertyTwo = x.propertyList居然抛出一个错误,带着红色的下划线。

如何在这种情况下实现propertyTwo.AddRange(other)的等价物?

干杯

+3

是propertyTwo应该有一个'私人'二传手。 – 2009-12-21 23:09:23

+0

是的,并在班级建设期间初始化。 在正常情况下,它会是这样的: TestClass newClass = new TestClass(); newClass.propertyTwo.AddRange(new List (){1,2,3,4}); – Joshscorp 2009-12-21 23:12:25

回答

3

正如其他人所说,你不能设置propertyTwo,因为它宣布为私人。如果你只是想将其放置在建筑,你可以添加第二个构造函数允许你传递的初步清单,让您:

class TestClass 
{ 
    public int propertyOne {get;set;} 
    public List<int> propertyTwo {get; private set;} 

    public TestClass() : this(new List<int>()) { } 
    public TestClass(List<int> initialList) 
    { 
     propertyTwo = initialList; 
    } 
} 
... 
var results = from x in MyOtherClass 
select new TestClass(x.propertyList) 
{ 
    propertyOne = x.propertyFirst 
}; 
2

由于忘记分号上面说的,好像这里的问题是,你的propertyTwo设有私人二传手。

试着改变你的代码TestClass是:

public List<int> propertyTwo {get; set;} 

我不相信你可以初始化使用非对称访问器可访问性设置为私有财产。

1

是无障碍环境是这里的问题。如果你不需要公共setter,你可以添加一个方法SetPropertyList()来设置值,有效地以不同的方式做同样的事情。