第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

不使用LINQto對象的區(qū)別

不使用LINQto對象的區(qū)別

郎朗坤 2019-07-13 10:23:12
不使用LINQto對象的區(qū)別class Program{     static void Main(string[] args)     {         List<Book> books = new List<Book>          {             new Book             {                 Name="C# in Depth",                 Authors = new List<Author>                 {                     new Author                      {                         FirstName = "Jon", LastName="Skeet"                     },                      new Author                      {                         FirstName = "Jon", LastName="Skeet"                     },                                        }             },             new Book             {                 Name="LINQ in Action",                 Authors = new List<Author>                 {                     new Author                      {                         FirstName = "Fabrice", LastName="Marguerie"                     },                      new Author                      {                         FirstName = "Steve", LastName="Eichert"                     },                      new Author                      {                         FirstName = "Jim", LastName="Wooley"                     },                 }             },         };         var temp = books.SelectMany(book => book.Authors).Distinct();         foreach (var author in temp)         {             Console.WriteLine(author.FirstName + " " + author.LastName);         }         Console.Read();     }}public class Book{     public string Name { get; set; }     public List<Author> Authors { get; set; }}public class Author{     public string FirstName { get; set; }     public string LastName { get; set; }     public override bool Equals(object obj)     {         return true;         //if (obj.GetType() != typeof(Author)) return false;         //else return ((Author)obj).FirstName == this.FirstName && ((Author)obj).FirstName == this.LastName;     }}這是基于“LINQ in Action”中的一個(gè)例子。清單4.16。這印了喬恩·斯基特兩次。為什么?我甚至在Author類中嘗試過重寫等于方法。仍然不同似乎不起作用。我遺漏了什么?
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

這個(gè)Distinct()方法檢查引用類型的引用相等性。這意味著它在尋找相同的復(fù)制對象,而不是包含相同值的不同對象。

有一個(gè)過載這需要一個(gè)質(zhì)量檢驗(yàn)員,因此您可以指定不同的邏輯來確定給定對象是否等于另一個(gè)對象。

如果希望Author的行為通常類似于普通對象(即僅引用相等),但為了根據(jù)名稱值進(jìn)行不同的檢查相等,請使用質(zhì)量檢驗(yàn)員..如果您總是希望根據(jù)名稱值對Author對象進(jìn)行比較,那么重寫GetHashCode并等于,或實(shí)施I赤道.

.上的兩個(gè)成員IEqualityComparer接口EqualsGetHashCode..你的邏輯決定兩個(gè)Author如果名字字符串和姓字符串相同,則對象看起來是相等的。

public class AuthorEquals : IEqualityComparer<Author>{
    public bool Equals(Author left, Author right)
    {
        if((object)left == null && (object)right == null)
        {
            return true;
        }
        if((object)left == null || (object)right == null)
        {
            return false;
        }
        return left.FirstName == right.FirstName && left.LastName == right.LastName;
    }

    public int GetHashCode(Author author)
    {
        return (author.FirstName + author.LastName).GetHashCode();
    }}


查看完整回答
反對 回復(fù) 2019-07-13
?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

另一個(gè)沒有實(shí)現(xiàn)的解決方案IEquatableEqualsGetHashCode是使用LINQGroupBy方法,并從IGrouping中選擇第一個(gè)項(xiàng)。

var temp = books.SelectMany(book => book.Authors)
                .GroupBy (y => y.FirstName + y.LastName )
                .Select (y => y.First ());foreach (var author in temp){
  Console.WriteLine(author.FirstName + " " + author.LastName);}


查看完整回答
反對 回復(fù) 2019-07-13
  • 3 回答
  • 0 關(guān)注
  • 406 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號