Attribute.GetHashCode 方法

定义

返回此实例的哈希代码。

C#
public override int GetHashCode ();

返回

Int32

32 位有符号整数哈希代码。

示例

下面的代码示例演示了 GetHashCode 在上下文 Attribute中使用 。

C#
using System;
using System.Reflection;
using System.Collections.Generic;

// A custom attribute to allow two authors per method.
public class AuthorsAttribute : Attribute
{
   protected string _authorName1;
   protected string _authorName2;

   public AuthorsAttribute(string name1, string name2)
   {
      _authorName1 = name1;
      _authorName2 = name2;
   }

   public string AuthorName1
   {
      get { return _authorName1; }
      set { _authorName1 = value; }
   }

   public string AuthorName2
   {
      get { return _authorName2; }
      set { _authorName2 = value; }
   }

   // Use the hash code of the string objects and xor them together.
   public override int GetHashCode()
   {
      return _authorName1.GetHashCode() ^ _authorName2.GetHashCode();
   }
}

// Provide the author names for each method of the class.
public class TestClass
{
  [Authors("Immanuel Kant", "Lao Tzu")]
  public void Method1()
  {}

  [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
  public void Method2()
  {}

  [Authors("Immanuel Kant", "Lao Tzu")]
  public void Method3()
  {}

  [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
  public void Method4()
  {}

  [Authors("Immanuel Kant", "Friedrich Nietzsche")]
  public void Method5()
  {}
}

class Example
{
   static void Main()
   {
      // Get the class type to access its metadata.
      Type clsType = typeof(TestClass);

      // Store author information in a list of tuples.
      var authorsInfo = new List<Tuple<String, AuthorsAttribute>>();

      // Iterate through all the methods of the class.
      foreach(var method in clsType.GetMethods())
      {
          // Get the Authors attribute for the method if it exists.
          AuthorsAttribute authAttr =
              (AuthorsAttribute)Attribute.GetCustomAttribute(
              method, typeof(AuthorsAttribute));
          if (authAttr != null)
             // Add the information to the author list.
             authorsInfo.Add(Tuple.Create(clsType.Name + "." + method.Name,
                                             authAttr));
      }

      // Iterate through the list
      bool[] listed = new bool[authorsInfo.Count];
      Console.WriteLine("Method authors:\n");

      for (int ctr = 0; ctr < authorsInfo.Count; ctr++) {
         var authorInfo = authorsInfo[ctr];
         if (!listed[ctr]) {
             Console.WriteLine("{0} and {1}", authorInfo.Item2.AuthorName1,
                                              authorInfo.Item2.AuthorName2);
             listed[ctr] = true;
             Console.WriteLine("   {0}", authorInfo.Item1);
             for (int ctr2 = ctr + 1; ctr2 < authorsInfo.Count; ctr2++) {
                 if (!listed[ctr2])
                    if (authorInfo.Item2.Equals(authorsInfo[ctr2].Item2)) {
                       Console.WriteLine("   {0}", authorsInfo[ctr2].Item1);
                       listed[ctr2] = true;
                    }
            }
         }
      }
   }
}
// The example displays the following output:
//       Method authors:
//
//       Immanuel Kant and Lao Tzu
//          TestClass.Method1
//          TestClass.Method3
//       Jean-Paul Sartre and Friedrich Nietzsche
//          TestClass.Method2
//          TestClass.Method4
//       Immanuel Kant and Friedrich Nietzsche
//          TestClass.Method5

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0