📜  C#| Type.GetFields()方法

📅  最后修改于: 2021-05-29 17:23:46             🧑  作者: Mango

Type.GetFields()方法用于获取当前Type的字段。此方法的重载列表中有2种方法,如下所示:

  • GetFields()方法
  • GetFields(BindingFlags)方法

GetFields()方法

此方法用于返回当前Type的所有公共字段。

下面的程序说明了Type.GetFields()方法的用法:

范例1:

// C# program to demonstrate the
// Type.GetFields() Method
using System;
using System.Globalization;
using System.Reflection;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(Student);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of Fields by
            // using GetField() Method
            FieldInfo[] info = objType.GetFields(BindingFlags.Public | BindingFlags.Static);
  
            // Display the Result
            Console.Write("Fields of current type is as Follow: ");
            for (int i = 0; i < info.Length; i++)
                Console.WriteLine(" {0}", info[i]);
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) 
        {
            Console.Write("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
  
// Defining class Student
public class Student
{
    public string Name = "Rahul";
    public string Dept = "Electrical";
    public int Roll = 10;
    public static int id = 02;
}
输出:
Fields of current type is as Follow:  System.Int32 id

示例2:如果未定义公共字段

// C# program to demonstrate the
// Type.GetFields(String) Method
using System;
using System.Globalization;
using System.Reflection;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(Student);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of Fields by
            // using GetField() Method
            FieldInfo[] info = objType.GetFields();
  
            // Display the Result
            Console.Write("Public Fields of current type is as follow: ");
            if (info.Length != 0) 
            {
                for (int i = 0; i < info.Length; i++)
                    Console.WriteLine(" {0}", info[i]);
            }
            else
                Console.WriteLine("No public fields are defined for the current Type.");
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) 
        {
            Console.Write("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
  
// Defining class Student
public class Student
{ }
输出:
Public Fields of current type is as follow: No public fields are defined for the current Type.

GetFields(BindingFlags)方法

此方法用于在为派生类覆盖约束时使用指定的绑定来搜索为当前Type定义的字段。

下面的程序说明了上述方法的用法:

范例1:

// C# program to demonstrate the 
// Type.GetField(String) 
// Method 
using System; 
using System.Globalization; 
using System.Reflection; 
     
class GFG { 
     
    // Main Method 
    public static void Main() 
    { 
        // Declaring and initializing object of Type 
        Type objType = typeof(Student);
     
        // Creating try-catch block for handling Exception 
        try { 
               
            // You must specify either BindingFlags.Instance or BindingFlags.Static
            // and Specify BindingFlags.Public 
            // to include public fields in the search.
            BindingFlags battr = BindingFlags.Public | BindingFlags.Instance;
     
            // Getting FieldInfo by  
            // using GetField() Method 
            FieldInfo info = objType.GetField("Name", battr); 
     
            // Display the Result 
            Console.WriteLine("FieldInfo is -  {0}",info); 
        } 
     
        // catch ArgumentNullException here 
        catch (ArgumentNullException e)  
        { 
            Console.Write("name is null."); 
            Console.Write("Exception Thrown: "); 
            Console.Write("{0}", e.GetType(), e.Message); 
        } 
    } 
}
   
// Defining class Student
public class Student
{
    public string Name = "Rahul";
    public string Dept = "Electrical";
    public int Roll = 10;
}
输出:
FieldInfo is - System.String Name

示例2:对于ArgumentNullException

// C# program to demonstrate the 
// Type.GetFields(String) 
// Method 
using System; 
using System.Globalization; 
using System.Reflection; 
     
class GFG { 
     
    // Main Method 
    public static void Main() 
    { 
        // Declaring and initializing object of Type 
        Type objType = typeof(Book);
     
        // Creating try-catch block for handling Exception 
        try { 
     
            // Getting array of Fields by  
            // using GetField() Method 
            FieldInfo[] info = objType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 
     
            // Display the Result
            Console.WriteLine("Fields of current type is as follow :-");
            for(int i=0; i
输出:
FieldInfo is - System.String Name

参考:

  • https://docs.microsoft.com/zh-cn/dotnet/api/system.type.getfields?view=netframework-4.8