假设我有一个包含2个属性的类
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)的等价物?
干杯
答案 0 :(得分: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
};
答案 1 :(得分:2)
正如Forgotten Semicolon上面所说的那样,这里的问题似乎是你的propertyTwo
有私人制定者。
尝试将TestClass
中的代码更改为:
public List<int> propertyTwo {get; set;}
我不相信您可以使用非对称访问器辅助功能初始化设置为私有的属性。
答案 2 :(得分:1)
是可访问性是这里的问题。如果你不想要一个公共setter,你可以添加一个方法SetPropertyList()来设置值,有效地以不同的方式做同样的事情。