91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中的數組怎么使用

發布時間:2022-04-12 10:50:31 來源:億速云 閱讀:185 作者:iii 欄目:開發技術

今天小編給大家分享一下C#中的數組怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    如果需要使用同一類型的多個對象,可以使用數組和集合(后面介紹)。C#用特殊的記號聲明,初始化和使用數組。Array類在后臺發揮作用,它為數組中的元素排序和過濾提供了多個方法。使用枚舉器,可以迭代數組中的所有元素。
    如果需要使用不同類型的多個對象,可以使用Tuple(元組)類型。

    一.簡單數組(一維數組)

    數組是一種數據結構,它可以包含同一個類型的多個元素。

    1.數組的聲明

    在聲明數組時,先定義數組中的元素類型,其后是一對空方括號和一個變量名。

    int[] myArray;

    2.數組的初始化

    聲明了數組之后,就必須為數組分配內存,以保存數組的所有元素。數組是引用類型,所以必須給它分配堆上的內存。為此,應使用new運算符,指定數組中元素的類型和數量來初始化數組的變量。

    myArray = new int[4];

    在聲明和初始化數組后,變量myArray就引用了4個整數值,它們位于托管堆上:

    C#中的數組怎么使用

    在指定了數組的大小后,就不能重新設置數組的大小。如果事先不知道數組中應包含多少個元素,就可以使用集合。
    除了在兩個語句中聲明和初始化數組之外,還可以在一個語句中聲明和初始化數組:

    int[] myArray = new int[4];

    還可以使用數組初始化器為數組的每個元素復制。數組初始化器只能在聲明數組變量時使用,不能在聲明數組之后使用。

    int[] myArray = new int[4]{1,3,5,7};

    如果用花括號初始化數組,可以不指定數組的大小,因為編譯器會自動統計元素的個數:

    int[] myArray = new int[]{1,3,5,7};

    也可以使用更簡單的形式:

    int[] myArray = {1,3,5,7};

    3.訪問數組元素

    在聲明和初始化數組之后,就可以使用索引器訪問其中的元素了。數組只支持有整型參數的索引器。
    索引器總是以0開頭,表示第一個元素。可以傳遞給索引器的最大值是元素個數減1,因為索引從0開始:

    int[] myArray = {1,3,5,7};
    int v1 = myArray[0];
    int v2 = myArray[1];
    myArray[3] = 4;

    可以使用數組的Length屬性獲取元素的個數。

    4.數組中使用引用類型

    數組除了能聲明預定義類型的數組,還可以聲明自定義類型的數組。

      public class Person
      {
        public string FirstName { get; set; }
    
        public string LastName { get; set; }
    
        public override string ToString()
        {
          return String.Format("{0} {1}", FirstName, LastName);
        }
      }
    
      Person[] myPersons = new Person[2];
      myPersons[0] = new Person { FirstName = "Ayrton", LastName = "Senna" };
      myPersons[1] = new Person { FirstName = "Michael", LastName = "Schumacher" };

    如果數組中的元素是引用類型,就必須為每個數組元素分配內存。如果使用了數組中未分配內存的元素,就會拋出NullReferenceException類型的異常。
    下面是內存情況:

    C#中的數組怎么使用

    對自定義類型也可以使用數組初始化器:

      Person[] myPersons2 =
      {
        new Person { FirstName="Ayrton", LastName="Senna"},
        new Person { FirstName="Michael", LastName="Schumacher"}
      };

    二.多維數組

    多維數組用兩個或多個整數來索引。
    在C#中聲明多維數組,需要在方括號中加上逗號。數組在初始化時應指定每一維的大小(也稱為階)。

    int[,] twoDim = new int[3,3];
    twoDim[0,0] = 1;
    twoDim[0,1] = 2;
    twoDim[0,2] = 3;
    twoDim[1,0] = 4;
    twoDim[1,1] = 5;
    twoDim[1,2] = 6;
    twoDim[2,0] = 7;
    twoDim[2,1] = 8;
    twoDim[2,2] = 9;

    聲明數組之后,就不能修改其階數了。
    也可以使用初始化器來初始化多維數組:

      int[,] twoDim ={
        {1,2,3},
        {4,5,6},
        {7,8,9}
        };

    使用數組初始化器時,必須初始化數組的每個元素,不能遺漏任何元素。
    聲明一個三位數組:

      int[,,] threeDim ={
        {{1,2},{3,4}},
        {{5,6},{7,8}},
        {{9,10},{11,12}}
        };
      Console.WriteLine(threeDim[0,1,1]);

    三.鋸齒數組

    二維數組的大小對應于一個矩形,而鋸齒數組的大小設置比較靈活,在鋸齒數組中,每一行都可以有不同的大小。
    在聲明鋸齒數組時,要依次放置左右括號。在初始化鋸齒數組時,只在第一對方括號中設置該數組包含的行數。定義各行中元素個數的第二個方括號設置為空,因為這類數組的每一行包含不同的元素個數。之后,為每一行指定行中的元素個數:

      int[][] jagged = new int[3][];
      jagged[0] = new int[2]{1,2};
      jagged[1] = new int[4]{3,4,5,6};
      jagged[2] = new int[3]{7,8};

    迭代鋸齒數組中的所有元素的代碼可以放在嵌套的for循環中。在外層的for循環中迭代每一行,在內層的for循環中迭代一行中的每個元素:

      for(int row = 0;row<jagged.Length;row++)
      {
        for(int element = 0;element<jagged[row].Length;element++)
        {
          Console.WriteLine("row:{0}, element:{1},value:{2}",row,element,jagged[row][element]);
        }
      }

    四.Array類

    用方括號聲明數組是C#中使用Array類的表示法。在后臺使用C#語法,會創建一個派生自抽象基類Array的新類。這樣,就可以使用Array類為每個C#數組定義的方法和屬性了。
    Array類實現的其它屬性有LongLength和Rank。如果數組包含的元素個數超出了整數的取值范圍,就可以使用LongLength屬性來獲得元素個數。使用Rank屬性可以獲得數組的維數。

    1.創建數組

    Array類是一個抽象類,所以不能使用構造函數來創建數組。但除了使用C#語法創建數組實例之外,還可以使用靜態方法CreateInstance()創建數組。如果事先不知道元素的類型,該靜態方法就很有用,因為類型可以作為Type對象傳遞給CreateInstance()方法。
    CreateInstance()方法的第一個參數是元素的類型,第二個參數定義數組的大小。
    可以使用SetValue()方法設置對應元素的值,用GetValue()方法讀取對應元素的值。

      Array intArray1 = Array.CreateInstance(typeof(int), 5);
      for (int i = 0; i < 5; i++)
      {
        intArray1.SetValue(33, i);
      }
    
      for (int i = 0; i < 5; i++)
      {
        Console.WriteLine(intArray1.GetValue(i));
      }

    還可以將已經創建的數組強制轉換稱聲明為int[]的數組:

    int[] intArray2 = (int[])intArray1;

    CreateInstance()方法有許多重載版本,可以創建多維數組和索引不基于0的數組。

      //創建一個2X3的二維數組,第一維基于1,第二維基于10:
      int[] lengths = { 2, 3 };
      int[] lowerBounds = { 1, 10 };
      Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds);
    
      racers.SetValue(new Person { FirstName = "Alain", LastName = "Prost" }, index1: 1, index2: 10);
      racers.SetValue(new Person
      {
        FirstName = "Emerson",
        LastName = "Fittipaldi"
      }, 1, 11);
      racers.SetValue(new Person { FirstName = "Ayrton", LastName = "Senna" }, 1, 12);
      racers.SetValue(new Person { FirstName = "Michael", LastName = "Schumacher" }, 2, 10);
      racers.SetValue(new Person { FirstName = "Fernando", LastName = "Alonso" }, 2, 11);
      racers.SetValue(new Person { FirstName = "Jenson", LastName = "Button" }, 2, 12);
    
      Person[,] racers2 = (Person[,])racers;
      Person first = racers2[1, 10];
      Person last = racers2[2, 12];

    2.復制數組

    因為數組是引用類型,所以將一個數組變量賦予另一個數組變量,就會得到兩個引用同一數組的變量。
    數組實現ICloneable接口。這個接口定義的Clone()方法會復制數組,創建數組的淺表副本。
    如果數組的元素是值類型,Clone()方法會復制所有值:

      int[] a1 = {1,2};
      int[] a2 = (int[])a1.Clone();

    如果數組包含引用類型,只復制引用。
    除了使用Clone()方法之外,還可以使用Array.Copy()方法創建淺表副本。

      Person[] beatles = {
        new Person { FirstName="John", LastName="Lennon" },
        new Person { FirstName="Paul", LastName="McCartney" }
      };
    
      Person[] beatlesClone = (Person[])beatles.Clone();
      Person[] beatlesClone2 = new Person[2];
      Array.Copy(beatlesClone,beatlesClone2,2);//注意與Clone的語法區別,Copy需要傳遞階數相同的已有數組。(還可以使用CopyTo()方法)

    3.排序

    Array類使用快速排序算法對數組中的元素進行排序。Sort()方法需要數組中的元素實現IComparable接口。因為簡單類型(如String,Int32)實現IComparable接口,所以可以對包含這些類型的元素排序。

        string[] names = {
        "Christina Aguilera",
        "Shakira",
        "Beyonce",
        "Gwen Stefani"
        };
    
        Array.Sort(names);
    
        foreach (string name in names)
        {
          Console.WriteLine(name);
        }

    如果對數組使用使用自定義類,就必須實現IComparable接口。這個接口只定義了一個方法CompareTo()方法,如果要比較的對象相等,該方法就返回0.如果該實例應排在參數對象的前面,該方法就返回小于i0de值。如果該實例應排在參數對象的后面,該方法就返回大于0的值。

      public class Person : IComparable<Person>
      {
        public string FirstName { get; set; }
    
        public string LastName { get; set; }
    
        public override string ToString()
        {
          return String.Format("{0} {1}",
          FirstName, LastName);
        }
    
        public int CompareTo(Person other)
        {
          if (other == null) throw new ArgumentNullException("other");
    
          int result = this.LastName.CompareTo(other.LastName);
          if (result == 0)
          {
            result = this.FirstName.CompareTo(other.FirstName);
          }
    
          return result;
        }
      }

    客戶端代碼:

      Person[] persons = {
      new Person { FirstName="Damon", LastName="Hill" },
      new Person { FirstName="Niki", LastName="Lauda" },
      new Person { FirstName="Ayrton", LastName="Senna" },
      new Person { FirstName="Graham", LastName="Hill" }
      };
      Array.Sort(persons);
      foreach (Person p in persons)
      {
        Console.WriteLine(p);
      }

    如果Person對象的排序方式與上述不同,或者不能修改在數組中用作元素的類,就可以實現IComparer接口或IComparer<T>接口。這兩個接口定義了方法Compare()方法。機型比較的類必須實現這兩個接口之一。

      public enum PersonCompareType
      {
        FirstName,
        LastName
      }
      //通過使用實現了IComparer<T> 泛型接口的PersonComparer類比較Person對象數組。
      public class PersonComparer : IComparer<Person>
      {
        private PersonCompareType compareType;
    
        public PersonComparer(PersonCompareType compareType)
        {
          this.compareType = compareType;
        }
    
    
        #region IComparer<Person> Members
    
        public int Compare(Person x, Person y)
        {
            if (x == null) throw new ArgumentNullException("x");
            if (y == null) throw new ArgumentNullException("y");
    
          switch (compareType)
          {
            case PersonCompareType.FirstName:
              return x.FirstName.CompareTo(y.FirstName);
            case PersonCompareType.LastName:
              return x.LastName.CompareTo(y.LastName);
            default:
              throw new ArgumentException(
              "unexpected compare type");
          }
        }
    
        #endregion
      }

    客戶端代碼:

      Person[] persons = {
      new Person { FirstName="Damon", LastName="Hill" },
      new Person { FirstName="Niki", LastName="Lauda" },
      new Person { FirstName="Ayrton", LastName="Senna" },
      new Person { FirstName="Graham", LastName="Hill" }
      };
      Array.Sort(persons,
      new PersonComparer(PersonCompareType.FirstName));
    
      foreach (Person p in persons)
      {
        Console.WriteLine(p);
      }

    五.數組作為參數

    數組可以作為參數傳遞給方法,也可以從方法中返回。

    1.數組協變

    數組支持協變。這表示數組可以聲明為基類,其派生類型的元素可以賦值于數組元素。

      static void DisPlay(object[] o)
      {
        //..
      }

    可以給該方法傳遞一個Person[]。
    數組協變只能用于引用類型,不能用于值類型。

    2.ArraySegment<T>

    結構ArraySegment<T>表示數組的一段。如果需要使用不同的方法處理某個大型數組的不同部分,那么可以把相應的數組部分復制到各個方法。
    ArraySegment<T>結構包含了關于數組段的信息(偏移量和元素個數)。

      static void Main()
      {
        int[] ar1 = { 1, 4, 5, 11, 13, 18 };
        int[] ar2 = { 3, 4, 5, 18, 21, 27, 33 };
        var segments = new ArraySegment<int>[2]
        {
          new ArraySegment<int>(ar1, 0, 3),
          new ArraySegment<int>(ar2, 3, 3)
        };
    
    
        var sum = SumOfSegments(segments);
        Console.WriteLine("sum of all segments: {0}", sum);
    
      }
    
      static int SumOfSegments(ArraySegment<int>[] segments)
      {
      int sum = 0;
      foreach (var segment in segments)
      {
        for (int i = segment.Offset; i < segment.Offset + segment.Count; i++)
        {
            sum += segment.Array[i];
        }
    
      }
      return sum;
      }

    數組段不復制原數組的元素,但原數組可以通過ArraySegment<T>訪問。如果數組段中的元素改變了,這些變化就會反映到原數組中。

    六.枚舉集合

    在foreach語句中使用枚舉,可以迭代集合中的元素,且無需知道集合中元素的個數。foreach語句使用一個枚舉器。foreach會調用實現了IEnumerable接口的集合類中的GetEumerator()方法。GetEumerator()方法返回一個實現IEnumerator接口的對象枚舉。foreach語句就可以使用IEnumerable接口迭代集合了。
    GetEumerator()方法在IEnumerable接口中定義。

    1.IEnumerator接口

    foreach語句使用IEnumerator接口的方法和屬性,迭代集合中所有元素。IEnumerator接口定義了Current屬性,來返回光標所在的元素,該接口的MoveNext()方法移動到集合的下一個元素上,如果有這個元素,該方法就返回true。如果集合不再有更多的元素,該方法就返回false.
    這個接口的泛型版本IEnumerator<T>派生自接口IDisposable,因此定義了Dispose()方法,來清理枚舉器占用的資源。

    2.foreach語句

    C#中foreach語句不會解析為IL代碼中的foreach語句。C#編譯器會把foreach語句轉換為IEnumerator接口的方法和屬性。

      Person[] persons = {
        new Person { FirstName="Damon", LastName="Hill" },
        new Person { FirstName="Niki", LastName="Lauda" },
        new Person { FirstName="Ayrton", LastName="Senna" },
        new Person { FirstName="Graham", LastName="Hill" }
      };
      foreach (Person p in persons)
      {
        Console.WriteLine(p);
      }

    foreach語句會解析為下面的代碼:

      IEnumerator<Person> enumerator = persons.GetEumerator();
      while(enumerator.MoveNext())
      {
        Person p = enumerator.Current;
        Console.WriteLine(p);
      }

    3.yield語句

    在C#2.0之前,foreach語句可以輕松的迭代集合,但創建枚舉器需要做大量的工作。C#2.0添加了yield語句,以便創建枚舉器。
    yield return 語句返回集合的一個元素,并移動到下一個元素。yield break可停止迭代。
    下面的例子實現返回兩個字符串:

      public class HelloCollection
      {
        public IEnumerator<string> GetEnumerator()
        {
        yield return "Hello";
        yield return "World";
        }
      }

    客戶端代碼:

      var helloCollection = new HelloCollection();
      foreach (string s in helloCollection)
      {
        Console.WriteLine(s);
      }

    包含yield語句的方法或屬性也稱為迭代塊。迭代塊必須聲明為返回IEnumerator或IEnumerable接口,或者這些接口的泛型版本。這個塊可以包含多條yield return語句或yield break語句,但不能包含return語句。
    使用迭代塊,編譯器會生成一個yield類型,其中包含一個狀態機,如下面代碼所示:
    yield類型實現IEnumerator和IDisposable接口的方法和屬性。下面的例子可以把yield類型看作內部類Enumerator。外部類的GetEnumerator()方法實例化并返回一個新的yield類型。在yield類型中,變量state定義了迭代的當前位置,每次調用MoveNext()時,當前位置都會改變。MoveNext()封裝了迭代塊的代碼,并設置了current變量的值,從而使Current屬性根據位置返回一個對象。

      public class HelloCollection
      {
        public IEnumerator<string> GetEnumerator()
        {
          return new Enumerator(0);
        }
    
      public class Enumerator:IEnumerator<string>,IEnumerator,IDisposable
      {
        private int state;
        private string current;
    
        public Enumerator(int state)
        {
          this.state = state;
        }
    
        bool System.Collections.IEnumerator.MoveNext()
        {
          switch(state)
          {
            case 0:
              current="hello";
              state =1;
              return true;
            case 1:
              current="world";
              state =2;
              return true;
            case 2:
              break;
          }
    
          return false;
        }
    
        void System.Collection>IEnumerator.Reset()
        {
          throw new NotSupportedException();
        }
    
        string System.Collections.Generic.IEnumerator<string>.Current
        {
          get
          {
            return current;
          }
        }
    
        object System.Collections.IEnumerator.Current
        {
          get
          {
            return current;
          }
        }
    
        void IDisposable.Dispose()
        {}
      }
    }

    yield語句會產生一個枚舉器,而不僅僅生成一個包含的項的列表。這個枚舉器通過foreach語句調用。從foreach中依次訪問每一項,就會訪問枚舉器。這樣就可以迭代大量的數據,而無需一次把所有的數據都讀入內存。

    (1).迭代集合的不同方式

    可以使用yield return語句,以不同方式迭代集合。
    類MusicTitles可以用默認方式通過GetEnumerator()方法迭代標題,該方法不必在代碼中編寫,也可以用Reverse()逆序迭代標題,用Subset()方法迭代子集合:

        public class MusicTitles
        {
          string[] names = {
          "Tubular Bells", "Hergest Ridge",
          "Ommadawn", "Platinum" };
    
          public IEnumerator<string> GetEnumerator()
          {
            for (int i = 0; i < 4; i++)
            {
              yield return names[i];
            }
          }
    
          public IEnumerable<string> Reverse()
          {
            for (int i = 3; i >= 0; i--)
            {
              yield return names[i];
            }
          }
    
          public IEnumerable<string> Subset(int index, int length)
          {
            for (int i = index; i < index + length;i++)
            {
              yield return names[i];
            }
          }
        }

    客戶端代碼:

        var titles = new MusicTitles();
        foreach (var title in titles)
        {
          Console.WriteLine(title);
        }
        Console.WriteLine();
    
        Console.WriteLine("reverse");
        foreach (var title in titles.Reverse())
        {
          Console.WriteLine(title);
        }
        Console.WriteLine();
    
        Console.WriteLine("subset");
        foreach (var title in titles.Subset(2, 2))
        {
          Console.WriteLine(title);
        }
    (2).用yield return 返回枚舉器
    public class GameMoves
      {
        private IEnumerator cross;
        private IEnumerator circle;
    
        public GameMoves()
        {
          cross = Cross();
          circle = Circle();
        }
    
        private int move = 0;
        const int MaxMoves = 9;
    
        public IEnumerator Cross()
        {
          while (true)
          {
            Console.WriteLine("Cross, move {0}", move);
            if (++move >= MaxMoves)
              yield break;
            yield return circle;
          }
        }
    
        public IEnumerator Circle()
        {
          while (true)
          {
            Console.WriteLine("Circle, move {0}", move);
            if (++move >= MaxMoves)
              yield break;
            yield return cross;
          }
        }
      }

    客戶端代碼:

        var game = new GameMoves();
    
        IEnumerator enumerator = game.Cross();
        while (enumerator.MoveNext())
        {
          enumerator = enumerator.Current as IEnumerator;
        }

    這樣會交替調用Cross()和Circle()方法。

    七.元組(Tuple)

    元組可以合并不同類型的對象。元組起源于函數編程語言,如F#。在.NET Framework中,元組可用于所有的.Net語言。
    .NET Framework定義了8個泛型Tuple類和一個靜態Tuple類,它們用作元組的工廠。不同的泛型Tuple類支持不同數量的元素。如,Tuple<T1>包含一個元素,Tuple<T1,T2>包含兩個元素。

    Tuple<string, string> name = new Tuple<string, string>("Jochen", "Rindt");

    元組也可以用靜態Tuple類的靜態Create()方法創建。Create()方法的泛型參數定了要實例化的元組類型:

      public static Tuple<int, int> Divide(int dividend, int divisor)
      {
        int result = dividend / divisor;
        int reminder = dividend % divisor;
    
        return Tuple.Create<int, int>(result, reminder);
      }

    可以用屬性Item1和Item2訪問元組的項:

      var result = Divide(5, 2);
      Console.WriteLine("result of division: {0}, reminder: {1}", result.Item1, result.Item2);

    如果元組包含的項超過8個,就可以使用帶8個參數的Tuple類定義。最后一個模板參數是TRest,表示必須給它傳遞一個元組。這樣,就可以創建帶任意個參數的元組了。
     

      var tuple = Tuple.Create<string, string, string, int, int, int, double, Tuple<int, int>>(
      "Stephanie", "Alina", "Nagel", 2009, 6, 2, 1.37, Tuple.Create<int, int>(52, 3490));

    八.結構比較

    數組和元組都實現接口IStructuralEquatable和IStructuralComparable。這兩個接口不僅可以比較引用,還可以比較內容。這些接口都是顯式實現的,所以在使用時需要把數組和元組強制轉換為這個接口。
    IStructuralEquatable接口用于比較兩個元組或數組是否有相同的內同,IStructuralComparable接口用于給元組或數組排序。
    IStructuralEquatable接口示例:
    編寫實現IEquatable接口的Person類,IEquatable接口定義了一個強類型化的Equals()方法,比較FirstName和LastName的值:

    public class Person : IEquatable<Person>
      {
        public int Id { get; private set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    
        public override string ToString()
        {
          return String.Format("{0}, {1} {2}", Id, FirstName, LastName);
        }
    
        public override bool Equals(object obj)
        {
            if (obj == null)
                return base.Equals(obj);
            return Equals(obj as Person);
        }
    
        public override int GetHashCode()
        {
            return Id.GetHashCode();
        }
    
        #region IEquatable<Person> Members
    
        public bool Equals(Person other)
        {
          if (other == null)
            return base.Equals(other);
    
          return this.FirstName == other.FirstName && this.LastName == other.LastName;
        }
    
        #endregion
      }

    創建兩個包含相同內容的Person類型的數組:

      var janet = new Person { FirstName = "Janet", LastName = "Jackson" };
      Person[] persons1 = { new Person { FirstName = "Michael", LastName = "Jackson" }, janet };
      Person[] persons2 = { new Person { FirstName = "Michael", LastName = "Jackson" }, janet };

    由于兩個變量引用兩個不同數組,所以!=返回True:

      if (persons1 != persons2)
        Console.WriteLine("not the same reference");

    對于IStructuralEquatable接口定義的Equals方法,第一個參數是object類型,第二個參數是IEqualityComparer類型。調用這個方法時,通過傳遞一個實現了EqualityComparer<T>的對象,就可以定義如何進行比較。通過EqualityComparer<T>類完成IEqualityComparer的一個默認實現。這個實現檢查T類型是否實現了IEquatable接口,并調用IEquatable.Equals()方法。如果該類沒有實現IEquatable接口,就調用Object基類中Equals()方法:

      if ((persons1 as IStructuralEquatable).Equals(persons2, EqualityComparer<Person>.Default))
      {
        Console.WriteLine("the same content");
      }

    元組示例:
    Tuple<>類提供了兩個Epuals()方法:一個重寫了Object基類中的Epuals方法,并把object作為參數,第二個由IStructuralEquatable接口定義,并把object和IEqualityComparer作為參數。

      var t1 = Tuple.Create<int, string>(1, "Stephanie");
      var t2 = Tuple.Create<int, string>(1, "Stephanie");
      if (t1 != t2)
      Console.WriteLine("not the same reference to the tuple");

    這個方法使用EqualityComparer<object>.Default獲取一個ObjectEqualityComparer<object>,以進行比較。這樣就會調用Object.Equals()方法比較元組的每一項:

      if (t1.Equals(t2))
        Console.WriteLine("equals returns true");

    還可以使用TupleComparer類創建一個自定義的IEqualityComparer

      TupleComparer tc = new TupleComparer();
    
      if ((t1 as IStructuralEquatable).Equals(t2, tc))
      {
        Console.WriteLine("yes, using TubpleComparer");
      }
    
    
      class TupleComparer : IEqualityComparer
      {
        #region IEqualityComparer Members
    
        public new bool Equals(object x, object y)
        {
          bool result = x.Equals(y);
          return result;
        }
    
        public int GetHashCode(object obj)
        {
          return obj.GetHashCode();
        }
    
        #endregion
      }

    以上就是“C#中的數組怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    东明县| 斗六市| 新乐市| 郯城县| 聊城市| 吴江市| 屏东市| 双流县| 方山县| 英吉沙县| 宝丰县| 石家庄市| 衡阳县| 垣曲县| 梁山县| 会东县| 岳普湖县| 海伦市| 沁阳市| 陆丰市| 库尔勒市| 股票| 南投县| 丰原市| 江达县| 黑水县| 大足县| 卫辉市| 开化县| 滦南县| 密云县| 凯里市| 确山县| 鲜城| 溆浦县| 微山县| 车险| 舞钢市| 页游| 咸宁市| 旬阳县|