如何使用LINQ创建对象并初始化该对象中的列表? (另外,我试图创建一个不可变对象。)我正在访问XML Web服务。
例如,我有一个包含多个属性的类。但是,我在课堂上也有一些私人名单。
public class MyClass
{
public string SomeProperty { get; private set; }
public string AnotherProperty { get; private set; }
internal List<Result> ResultSet1 { get; set; }
internal List<Result> ResultSet2 { get; set; }
public IEnumerable<Result> GetResultSet1()
{
return ResultSet1;
}
//Constructor here to set the private properties eg: this.SomeProperty = someProperty;
//etc.
}
然后我有Result.cs
:
public class Result
{
public string YetAnotherProperty { get; private set; }
//etc.
}
到目前为止,我能够使用LINQ来读取XML并创建一个&#34; MyClass&#34;对象,然后通过构造函数设置它的属性。但是,我不知道如何:
List<Result>
Result
的属性
这是我到目前为止的LINQ:
//Use the contents of XML nodes/elements as the arguments for the constructor:
var query = from i in document.Descendants("response")
select new MyClass
(
(string)i.Element("some").Element("property"),
(string)i.Element("another").Element("property")
)
我的问题:我不太了解LINQ或使用LINQ创建对象,以了解如何初始化我正在尝试创建的对象中的列表。我该怎么做呢?如何从LINQ中向ResultSet1
添加项目?
答案 0 :(得分:3)
假设可以访问属性,您只需通过常规对象初始化程序语法设置属性即可。只需在new
来电后添加一对括号,然后设置属性。
var query =
from response in document.Descendants("response")
// for readability
let someProperty = (string)response.Element("some").Element("property")
let anotherProperty = (string)response.Element("another").Element("property")
select new MyClass(someProperty, anotherProperty)
{
ResultSet1 = response.Elements("someSet")
.Select(ss => new Result
{
YetAnotherProperty = (string)ss.Element("another")
.Element("property")
})
.ToList()
ResultSet2 = /* etc. */,
};
答案 1 :(得分:1)
在调用构造函数后添加对象初始值设定项:
var query = from i in document.Descendants("response")
select new MyClass
(
(string)i.Element("some").Element("property"),
(string)i.Element("another").Element("property")
)
{
ResultSet1 = new List<Result>
{
new Result { YetAnotherProperty = ... },
new Result { ... }
},
ResultSet 2 = ...
};
虽然这变得非常讨厌,并且可能很难在路上进行调试。接受节点并将其解析出来的构造函数怎么样?