gpt4 book ai didi

C# - 如何使用 LINQ to Objects 创建不可变对象(immutable对象)

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:15 25 4
gpt4 key购买 nike

我正在使用 LINQ 通过解析 XDocument 中的值来创建一个对象。我的理解是,除非您以后确实需要更改值,否则应该将对象创建为不可变的,因此我制作了私有(private) setter 。

public class GeoLookupResult
{
public string LocationType { get; private set; }
public string Country { get; private set; }
public string CountryIso3166 { get; private set; }

public GeoLookupResult(string locationType, string country, string countryIso3166)
{
this.LocationType = locationType;
this.Country = country;
this.CountryIso3166 = countryIso3166;
}
}

但似乎我无法使用 LINQ to Objects 来创建具有这样构造函数的对象(因为“GeoLookupResult 不包含‘locationType’的定义”等):

XDocument document;

document = XDocument.Load("http://api.wunderground.com/api/d36f54198ebbb48c/geolookup/q/England/London.xml");

var query = from i in document.Descendants("response")
select new GeoLookupResult
{
locationType = (string)i.Element("location").Element("type"),
country = (string)i.Element("location").Element("country"),
countryIso3166 = (string)i.Element("location").Element("country_iso3166")
};

有没有办法让我可以像这样使用构造函数?或者我应该放弃不变性的想法,只拥有公共(public)属性 setter 并在 LINQ 查询中使用它们吗? (例如:LocationType = (string)i.Element("location").Element("type")

最佳答案

我不太确定我是否答对了你的问题,但你试过了吗?

var query = from i in document.Descendants("response")
select new GeoLookupResult(
(string)i.Element("location").Element("type"),
(string)i.Element("location").Element("country"),
(string)i.Element("country_iso3166")
);

这样,您将使用三个参数调用 GeoLookupResult 类的已定义构造函数。您目前拥有它的方式是尝试调用默认构造函数,然后通过您声明为私有(private)的 setter 分配提供的属性。

关于C# - 如何使用 LINQ to Objects 创建不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com