Type.GetFields()方法用于获取当前Type的字段。此方法的重载列表中有2种方法,如下所示:
- GetFields()方法
- GetFields(BindingFlags)方法
GetFields()方法
此方法用于返回当前Type的所有公共字段。
Syntax: public System.Reflection.FieldInfo[] GetFields ();
Return Value: This method returns an array of FieldInfo objects representing all the public fields defined for the current Type. Or, an empty array of type FieldInfo, if no public fields are defined for the current 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定义的字段。
Syntax: public abstract System.Reflection.FieldInfo[] GetFields (System.Reflection.BindingFlags bindingAttr);
Here, bindingAttr is a bitmask comprised of one or more BindingFlags that specify how the search is conducted or Zero, to return null.
Return Value: This method returns an array of FieldInfo objects representing all fields defined for the current Type that match the specified binding constraints. Or, an empty array of type FieldInfo, if no fields are defined for the current Type, or if none of the defined fields match the binding constraints.
下面的程序说明了上述方法的用法:
范例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