Class AccessTools
A helper class for reflection related functions
Inheritance
Namespace: HarmonyLib
Assembly: 0Harmony.dll
Syntax
public static class AccessTools
Fields
all
Shortcut for System.Reflection.BindingFlags to simplify the use of reflections and make it work for any access level
Declaration
public static readonly BindingFlags all
Field Value
| Type | Description |
|---|---|
| BindingFlags |
allDeclared
Shortcut for System.Reflection.BindingFlags to simplify the use of reflections and make it work for any access level but only within the current type
Declaration
public static readonly BindingFlags allDeclared
Field Value
| Type | Description |
|---|---|
| BindingFlags |
Properties
IsMonoRuntime
True if the current runtime is based on Mono, false otherwise (.NET)
Declaration
public static bool IsMonoRuntime { get; }
Property Value
| Type | Description |
|---|---|
| bool |
IsNetCoreRuntime
True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework)
Declaration
public static bool IsNetCoreRuntime { get; }
Property Value
| Type | Description |
|---|---|
| bool |
IsNetFrameworkRuntime
True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed)
Declaration
public static bool IsNetFrameworkRuntime { get; }
Property Value
| Type | Description |
|---|---|
| bool |
Methods
ActualParameters(MethodBase, object[])
Creates an array of input parameters for a given method and a given set of potential inputs
Declaration
public static object[] ActualParameters(MethodBase method, object[] inputs)
Parameters
| Type | Name | Description |
|---|---|---|
| MethodBase | method | The method/constructor you are planing to call |
| object[] | inputs | The possible input parameters in any order |
Returns
| Type | Description |
|---|---|
| object[] | An object array matching the method signature |
AllAssemblies()
Enumerates all assemblies in the current app domain, excluding visual studio assemblies
Declaration
public static IEnumerable<Assembly> AllAssemblies()
Returns
| Type | Description |
|---|---|
| IEnumerable<Assembly> | An enumeration of System.Reflection.Assembly |
AllTypes()
Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies
Declaration
public static IEnumerable<Type> AllTypes()
Returns
| Type | Description |
|---|---|
| IEnumerable<Type> | An enumeration of all System.Type in all assemblies, excluding visual studio assemblies |
ClearTypeSearchCache()
Clears the type cache that TypeSearch(Regex, bool) uses
Declaration
public static void ClearTypeSearchCache()
CombinedHashCode(IEnumerable<object>)
Calculates a combined hash code for an enumeration of objects
Declaration
public static int CombinedHashCode(IEnumerable<object> objects)
Parameters
| Type | Name | Description |
|---|---|---|
| IEnumerable<object> | objects | The objects |
Returns
| Type | Description |
|---|---|
| int | The hash code |
Constructor(Type, Type[], bool)
Gets the reflection information for a constructor by searching the type and all its super types
Declaration
public static ConstructorInfo Constructor(Type type, Type[] parameters = null, bool searchForStatic = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the constructor is declared |
| Type[] | parameters | Optional parameters to target a specific overload of the method |
| bool | searchForStatic | Optional parameters to only consider static constructors |
Returns
| Type | Description |
|---|---|
| ConstructorInfo | A constructor info or null when type is null or when the method cannot be found |
CreateInstance(Type)
Creates an (possibly uninitialized) instance of a given type
Declaration
public static object CreateInstance(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
Returns
| Type | Description |
|---|---|
| object | The new instance |
CreateInstance<T>()
Creates an (possibly uninitialized) instance of a given type
Declaration
public static T CreateInstance<T>()
Returns
| Type | Description |
|---|---|
| T | The new instance |
Type Parameters
| Name | Description |
|---|---|
| T | The class/type |
DeclaredConstructor(Type, Type[], bool)
Gets the reflection information for a directly declared constructor
Declaration
public static ConstructorInfo DeclaredConstructor(Type type, Type[] parameters = null, bool searchForStatic = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the constructor is declared |
| Type[] | parameters | Optional parameters to target a specific overload of the constructor |
| bool | searchForStatic | Optional parameters to only consider static constructors |
Returns
| Type | Description |
|---|---|
| ConstructorInfo | A constructor info or null when type is null or when the constructor cannot be found |
DeclaredEvent(string)
Gets the reflection information for a directly declared event
Declaration
public static EventInfo DeclaredEvent(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| EventInfo | An event or null when the event cannot be found |
DeclaredEvent(Type, string)
Gets the reflection information for a directly declared event
Declaration
public static EventInfo DeclaredEvent(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| EventInfo | An event or null when type/name is null or when the event cannot be found |
DeclaredEventAdder(string)
Gets the reflection information for the add method of a directly declared event
Declaration
public static MethodInfo DeclaredEventAdder(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the event cannot be found |
DeclaredEventAdder(Type, string)
Gets the reflection information for the add method of a directly declared event
Declaration
public static MethodInfo DeclaredEventAdder(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the event cannot be found |
DeclaredEventRemover(string)
Gets the reflection information for the remove method of a directly declared event
Declaration
public static MethodInfo DeclaredEventRemover(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the event cannot be found |
DeclaredEventRemover(Type, string)
Gets the reflection information for the remove method of a directly declared event
Declaration
public static MethodInfo DeclaredEventRemover(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the event cannot be found |
DeclaredField(string)
Gets the reflection information for a directly declared field
Declaration
public static FieldInfo DeclaredField(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| FieldInfo | A field or null when the field cannot be found |
DeclaredField(Type, int)
Gets the reflection information for a field
Declaration
public static FieldInfo DeclaredField(Type type, int idx)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the field is declared |
| int | idx | The zero-based index of the field inside the class definition |
Returns
| Type | Description |
|---|---|
| FieldInfo | A field or null when type is null or when the field cannot be found |
DeclaredField(Type, string)
Gets the reflection information for a directly declared field
Declaration
public static FieldInfo DeclaredField(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the field is defined |
| string | name | The name of the field |
Returns
| Type | Description |
|---|---|
| FieldInfo | A field or null when type/name is null or when the field cannot be found |
DeclaredFinalizer(Type)
Gets the reflection information for a directly declared finalizer
Declaration
public static MethodInfo DeclaredFinalizer(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type that defines the finalizer |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when the finalizer cannot be found |
DeclaredIndexer(Type, Type[])
Gets the reflection information for a directly declared indexer property
Declaration
public static PropertyInfo DeclaredIndexer(Type type, Type[] parameters = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the indexer property is declared |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| PropertyInfo | An indexer property or null when type is null or when it cannot be found |
DeclaredIndexerGetter(Type, Type[])
Gets the reflection information for the getter method of a directly declared indexer property
Declaration
public static MethodInfo DeclaredIndexerGetter(Type type, Type[] parameters = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the indexer property is declared |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when indexer property cannot be found |
DeclaredIndexerSetter(Type, Type[])
Gets the reflection information for the setter method of a directly declared indexer property
Declaration
public static MethodInfo DeclaredIndexerSetter(Type type, Type[] parameters)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the indexer property is declared |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when indexer property cannot be found |
DeclaredMethod(string, Type[], Type[])
Gets the reflection information for a directly declared method
Declaration
public static MethodInfo DeclaredMethod(string typeColonName, Type[] parameters = null, Type[] generics = null)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
| Type[] | parameters | Optional parameters to target a specific overload of the method |
| Type[] | generics | Optional list of types that define the generic version of the method |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the method cannot be found |
DeclaredMethod(Type, string, Type[], Type[])
Gets the reflection information for a directly declared method
Declaration
public static MethodInfo DeclaredMethod(Type type, string name, Type[] parameters = null, Type[] generics = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the method is declared |
| string | name | The name of the method (case sensitive) |
| Type[] | parameters | Optional parameters to target a specific overload of the method |
| Type[] | generics | Optional list of types that define the generic version of the method |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the method cannot be found |
DeclaredProperty(string)
Gets the reflection information for a directly declared property
Declaration
public static PropertyInfo DeclaredProperty(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| PropertyInfo | A property or null when the property cannot be found |
DeclaredProperty(Type, string)
Gets the reflection information for a directly declared property
Declaration
public static PropertyInfo DeclaredProperty(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the property is declared |
| string | name | The name of the property (case sensitive) |
Returns
| Type | Description |
|---|---|
| PropertyInfo | A property or null when type/name is null or when the property cannot be found |
DeclaredPropertyGetter(string)
Gets the reflection information for the getter method of a directly declared property
Declaration
public static MethodInfo DeclaredPropertyGetter(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the property cannot be found |
DeclaredPropertyGetter(Type, string)
Gets the reflection information for the getter method of a directly declared property
Declaration
public static MethodInfo DeclaredPropertyGetter(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the property is declared |
| string | name | The name of the property (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
DeclaredPropertySetter(string)
Gets the reflection information for the Setter method of a directly declared property
Declaration
public static MethodInfo DeclaredPropertySetter(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the property cannot be found |
DeclaredPropertySetter(Type, string)
Gets the reflection information for the setter method of a directly declared property
Declaration
public static MethodInfo DeclaredPropertySetter(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the property is declared |
| string | name | The name of the property (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
EnumeratorMoveNext(MethodBase)
Gets the System.Collections.IEnumerator.MoveNext() method of an enumerator method
Declaration
public static MethodInfo EnumeratorMoveNext(MethodBase method)
Parameters
| Type | Name | Description |
|---|---|---|
| MethodBase | method | Enumerator method that creates the enumerator System.Collections.IEnumerator |
Returns
| Type | Description |
|---|---|
| MethodInfo | The internal System.Collections.IEnumerator.MoveNext() method of the enumerator or null if no valid enumerator is detected |
Event(string)
Gets the reflection information for an event by searching the type and all its super types
Declaration
public static EventInfo Event(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| EventInfo | An event or null when the event cannot be found |
Event(Type, string)
Gets the reflection information for an event by searching the type and all its super types
Declaration
public static EventInfo Event(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| EventInfo | An event or null when type/name is null or when the event cannot be found |
EventAdder(string)
Gets the reflection information for the add method of an event by searching the type and all its super types
Declaration
public static MethodInfo EventAdder(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the event cannot be found |
EventAdder(Type, string)
Gets the reflection information for the add method of an event by searching the type and all its super types
Declaration
public static MethodInfo EventAdder(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the event cannot be found |
EventRemover(string)
Gets the reflection information for the remove method of an event by searching the type and all its super types
Declaration
public static MethodInfo EventRemover(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the event cannot be found |
EventRemover(Type, string)
Gets the reflection information for the remove method of an event by searching the type and all its super types
Declaration
public static MethodInfo EventRemover(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the event is declared |
| string | name | The name of the event (case sensitive) |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the event cannot be found |
Field(string)
Gets the reflection information for a field by searching the type and all its super types
Declaration
public static FieldInfo Field(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| FieldInfo | A field or null when the field cannot be found |
Field(Type, string)
Gets the reflection information for a field by searching the type and all its super types
Declaration
public static FieldInfo Field(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the field is defined |
| string | name | The name of the field (case sensitive) |
Returns
| Type | Description |
|---|---|
| FieldInfo | A field or null when type/name is null or when the field cannot be found |
FieldRefAccess<F>(string)
Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
Declaration
public static AccessTools.FieldRef<object, F> FieldRefAccess<F>(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| AccessTools.FieldRef<object, F> | A readable/assignable AccessTools.FieldRef<T, F> delegate with |
Type Parameters
| Name | Description |
|---|---|
| F | type of the field |
FieldRefAccess<F>(Type, string)
Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
Declaration
public static AccessTools.FieldRef<object, F> FieldRefAccess<F>(Type type, string fieldName)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type that defines the field, or derived class of this type; must not be a struct type unless the field is static |
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| AccessTools.FieldRef<object, F> | A readable/assignable AccessTools.FieldRef<T, F> delegate with |
Type Parameters
| Name | Description |
|---|---|
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T
in e.g. FieldRefAccess<T, F>(string).
This method supports static fields, even those defined in structs, for legacy reasons. Consider using StaticFieldRefAccess<F>(Type, string) (and other overloads) instead for static fields.
FieldRefAccess<T, F>(FieldInfo)
Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct)
Declaration
public static AccessTools.FieldRef<T, F> FieldRefAccess<T, F>(FieldInfo fieldInfo)
Parameters
| Type | Name | Description |
|---|---|---|
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| AccessTools.FieldRef<T, F> | A readable/assignable AccessTools.FieldRef<T, F> delegate |
Type Parameters
| Name | Description |
|---|---|
| T | An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including object),
implemented interface, or derived class of this type (" |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for cases where the field has already been obtained, avoiding the field searching cost in e.g. FieldRefAccess<T, F>(string).
This method supports static fields, even those defined in structs, for legacy reasons.
For such static fields, T is effectively ignored.
Consider using StaticFieldRefAccess<T, F>(FieldInfo) (and other overloads) instead for static fields.
For backwards compatibility, there is no class constraint on T.
Instead, the non-value-type check is done at runtime within the method.
FieldRefAccess<T, F>(string)
Creates a field reference delegate for an instance field of a class
Declaration
public static AccessTools.FieldRef<T, F> FieldRefAccess<T, F>(string fieldName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| AccessTools.FieldRef<T, F> | A readable/assignable AccessTools.FieldRef<T, F> delegate |
Type Parameters
| Name | Description |
|---|---|
| T | The class that defines the instance field, or derived class of this type |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
For backwards compatibility, there is no class constraint on T.
Instead, the non-value-type check is done at runtime within the method.
FieldRefAccess<T, F>(T, FieldInfo)
Creates a field reference for an instance field of a class
Declaration
public static ref F FieldRefAccess<T, F>(T instance, FieldInfo fieldInfo)
Parameters
| Type | Name | Description |
|---|---|---|
| T | instance | The instance |
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | The type that defines the field; or a parent class (including object), implemented interface, or derived class of this type
(" |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
If you need to access a field's value for potentially multiple instances, use FieldRefAccess<T, F>(FieldInfo) instead.
FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance).
For backwards compatibility, there is no class constraint on T.
Instead, the non-value-type check is done at runtime within the method.
FieldRefAccess<T, F>(T, string)
Creates an instance field reference for a specific instance of a class
Declaration
public static ref F FieldRefAccess<T, F>(T instance, string fieldName)
Parameters
| Type | Name | Description |
|---|---|---|
| T | instance | The instance |
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | The class that defines the instance field, or derived class of this type |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for one-off access to a field's value for a single instance.
If you need to access a field's value for potentially multiple instances, use FieldRefAccess<T, F>(string) instead.
FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance).
For backwards compatibility, there is no class constraint on T.
Instead, the non-value-type check is done at runtime within the method.
Finalizer(Type)
Gets the reflection information for a finalizer
Declaration
public static MethodInfo Finalizer(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type that defines the finalizer |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when the finalizer cannot be found |
FindIncludingBaseTypes<T>(Type, Func<Type, T>)
Applies a function going up the type hierarchy and stops at the first non-null result
Declaration
public static T FindIncludingBaseTypes<T>(Type type, Func<Type, T> func) where T : class
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start with |
| Func<Type, T> | func | The evaluation function returning T |
Returns
| Type | Description |
|---|---|
| T | The first non- |
Type Parameters
| Name | Description |
|---|---|
| T | Result type of func() |
Remarks
The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces, and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces). The top-most type in the type hierarchy of all non-interface types (including value types) is object.
FindIncludingInnerTypes<T>(Type, Func<Type, T>)
Applies a function going into inner types and stops at the first non-null result
Declaration
public static T FindIncludingInnerTypes<T>(Type type, Func<Type, T> func) where T : class
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start with |
| Func<Type, T> | func | The evaluation function returning T |
Returns
| Type | Description |
|---|---|
| T | The first non- |
Type Parameters
| Name | Description |
|---|---|
| T | Generic type parameter |
FirstConstructor(Type, Func<ConstructorInfo, bool>)
Given a type, returns the first constructor matching a predicate
Declaration
public static ConstructorInfo FirstConstructor(Type type, Func<ConstructorInfo, bool> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start searching at |
| Func<ConstructorInfo, bool> | predicate | The predicate to search with |
Returns
| Type | Description |
|---|---|
| ConstructorInfo | The constructor info or null if type/predicate is null or if a type with that name cannot be found |
FirstInner(Type, Func<Type, bool>)
Given a type, returns the first inner type matching a recursive search with a predicate
Declaration
public static Type FirstInner(Type type, Func<Type, bool> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start searching at |
| Func<Type, bool> | predicate | The predicate to search with |
Returns
| Type | Description |
|---|---|
| Type | The inner type or null if type/predicate is null or if a type with that name cannot be found |
FirstMethod(Type, Func<MethodInfo, bool>)
Given a type, returns the first method matching a predicate
Declaration
public static MethodInfo FirstMethod(Type type, Func<MethodInfo, bool> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start searching at |
| Func<MethodInfo, bool> | predicate | The predicate to search with |
Returns
| Type | Description |
|---|---|
| MethodInfo | The method or null if type/predicate is null or if a type with that name cannot be found |
FirstProperty(Type, Func<PropertyInfo, bool>)
Given a type, returns the first property matching a predicate
Declaration
public static PropertyInfo FirstProperty(Type type, Func<PropertyInfo, bool> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start searching at |
| Func<PropertyInfo, bool> | predicate | The predicate to search with |
Returns
| Type | Description |
|---|---|
| PropertyInfo | The property or null if type/predicate is null or if a type with that name cannot be found |
GetDeclaredConstructors(Type, bool?)
Gets reflection information for all declared constructors
Declaration
public static List<ConstructorInfo> GetDeclaredConstructors(Type type, bool? searchForStatic = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the constructors are declared |
| bool? | searchForStatic | Optional parameters to only consider static constructors |
Returns
| Type | Description |
|---|---|
| List<ConstructorInfo> | A list of constructor infos |
GetDeclaredFields(Type)
Gets reflection information for all declared fields
Declaration
public static List<FieldInfo> GetDeclaredFields(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the fields are declared |
Returns
| Type | Description |
|---|---|
| List<FieldInfo> | A list of fields |
GetDeclaredMember<T>(T)
Gets the real implementation of a class member
Declaration
public static T GetDeclaredMember<T>(this T member) where T : MemberInfo
Parameters
| Type | Name | Description |
|---|---|---|
| T | member | A member |
Returns
| Type | Description |
|---|---|
| T | The member itself if its declared. Otherwise the member that is actually implemented in some base type |
Type Parameters
| Name | Description |
|---|---|
| T |
GetDeclaredMethods(Type)
Gets reflection information for all declared methods
Declaration
public static List<MethodInfo> GetDeclaredMethods(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the methods are declared |
Returns
| Type | Description |
|---|---|
| List<MethodInfo> | A list of methods |
GetDeclaredProperties(Type)
Gets reflection information for all declared properties
Declaration
public static List<PropertyInfo> GetDeclaredProperties(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the properties are declared |
Returns
| Type | Description |
|---|---|
| List<PropertyInfo> | A list of properties |
GetDefaultValue(Type)
Gets default value for a specific type
Declaration
public static object GetDefaultValue(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
Returns
| Type | Description |
|---|---|
| object | The default value |
GetFieldNames(object)
Gets the names of all fields that are declared in the type of the instance
Declaration
public static List<string> GetFieldNames(object instance)
Parameters
| Type | Name | Description |
|---|---|---|
| object | instance | An instance of the type to search in |
Returns
| Type | Description |
|---|---|
| List<string> | A list of field names |
GetFieldNames(Type)
Gets the names of all fields that are declared in a type
Declaration
public static List<string> GetFieldNames(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The declaring class/type |
Returns
| Type | Description |
|---|---|
| List<string> | A list of field names |
GetMethodByModuleAndToken(string, int)
Returns a System.Reflection.MethodInfo by searching for module-id and token
Declaration
public static MethodInfo GetMethodByModuleAndToken(string moduleGUID, int token)
Parameters
| Type | Name | Description |
|---|---|---|
| string | moduleGUID | The module of the method |
| int | token | The token of the method |
Returns
| Type | Description |
|---|---|
| MethodInfo |
GetMethodNames(object)
Gets the names of all method that are declared in the type of the instance
Declaration
public static List<string> GetMethodNames(object instance)
Parameters
| Type | Name | Description |
|---|---|---|
| object | instance | An instance of the type to search in |
Returns
| Type | Description |
|---|---|
| List<string> | A list of method names |
GetMethodNames(Type)
Gets the names of all method that are declared in a type
Declaration
public static List<string> GetMethodNames(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The declaring class/type |
Returns
| Type | Description |
|---|---|
| List<string> | A list of method names |
GetOutsideCaller()
Returns who called the current method
Declaration
public static MethodBase GetOutsideCaller()
Returns
| Type | Description |
|---|---|
| MethodBase | The calling method/constructor (excluding the caller) |
GetPropertyNames(object)
Gets the names of all properties that are declared in the type of the instance
Declaration
public static List<string> GetPropertyNames(object instance)
Parameters
| Type | Name | Description |
|---|---|---|
| object | instance | An instance of the type to search in |
Returns
| Type | Description |
|---|---|
| List<string> | A list of property names |
GetPropertyNames(Type)
Gets the names of all properties that are declared in a type
Declaration
public static List<string> GetPropertyNames(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The declaring class/type |
Returns
| Type | Description |
|---|---|
| List<string> | A list of property names |
GetReturnedType(MethodBase)
Gets the return type of a method or constructor
Declaration
public static Type GetReturnedType(MethodBase methodOrConstructor)
Parameters
| Type | Name | Description |
|---|---|---|
| MethodBase | methodOrConstructor | The method/constructor |
Returns
| Type | Description |
|---|---|
| Type | The return type |
GetTypes(object[])
Returns an array containing the type of each object in the given array
Declaration
public static Type[] GetTypes(object[] parameters)
Parameters
| Type | Name | Description |
|---|---|---|
| object[] | parameters | An array of objects |
Returns
| Type | Description |
|---|---|
| Type[] | An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) |
GetTypesFromAssembly(Assembly)
Gets all successfully loaded types from a given assembly
Declaration
public static Type[] GetTypesFromAssembly(Assembly assembly)
Parameters
| Type | Name | Description |
|---|---|---|
| Assembly | assembly | The assembly |
Returns
| Type | Description |
|---|---|
| Type[] | An array of types |
Remarks
This calls and returns System.Reflection.Assembly.GetTypes(), while catching any thrown System.Reflection.ReflectionTypeLoadException. If such an exception is thrown, returns the successfully loaded types (System.Reflection.ReflectionTypeLoadException.Types, filtered for non-null values).
GetUnderlyingType(MemberInfo)
Gets the type of any class member of
Declaration
public static Type GetUnderlyingType(this MemberInfo member)
Parameters
| Type | Name | Description |
|---|---|---|
| MemberInfo | member | A member |
Returns
| Type | Description |
|---|---|
| Type | The class/type of this member |
HarmonyDelegate<DelegateType>(object)
Creates a delegate for a given delegate definition, attributed with [HarmonyDelegate]
Declaration
public static DelegateType HarmonyDelegate<DelegateType>(object instance = null) where DelegateType : Delegate
Parameters
| Type | Name | Description |
|---|---|---|
| object | instance | Only applies for instance methods. If |
Returns
| Type | Description |
|---|---|
| DelegateType | A delegate of given |
Type Parameters
| Name | Description |
|---|---|
| DelegateType | The delegate Type, attributed with [HarmonyDelegate] |
Remarks
This calls MethodDelegate<DelegateType>(MethodInfo, object, bool, Type[]) with the method and virtualCall arguments
determined from the [HarmonyDelegate] attributes on DelegateType,
and the given instance (for closed instance delegates).
Identifiable(MethodInfo)
Creates an identifiable version of a method
Declaration
public static MethodInfo Identifiable(this MethodInfo method)
Parameters
| Type | Name | Description |
|---|---|---|
| MethodInfo | method | The method |
Returns
| Type | Description |
|---|---|
| MethodInfo |
Indexer(Type, Type[])
Gets the reflection information for an indexer property by searching the type and all its super types
Declaration
public static PropertyInfo Indexer(Type type, Type[] parameters = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| PropertyInfo | An indexer property or null when type is null or when it cannot be found |
IndexerGetter(Type, Type[])
Gets the reflection information for the getter method of an indexer property by searching the type and all its super types
Declaration
public static MethodInfo IndexerGetter(Type type, Type[] parameters = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when the indexer property cannot be found |
IndexerSetter(Type, Type[])
Gets the reflection information for the setter method of an indexer property by searching the type and all its super types
Declaration
public static MethodInfo IndexerSetter(Type type, Type[] parameters = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| Type[] | parameters | Optional parameters to target a specific overload of multiple indexers |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type is null or when the indexer property cannot be found |
Inner(Type, string)
Given a type, returns the first inner type matching a recursive search by name
Declaration
public static Type Inner(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start searching at |
| string | name | The name of the inner type (case sensitive) |
Returns
| Type | Description |
|---|---|
| Type | The inner type or null if type/name is null or if a type with that name cannot be found |
InnerTypes(Type)
Enumerates all inner types (non-recursive) of a given type
Declaration
public static IEnumerable<Type> InnerTypes(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type to start with |
Returns
| Type | Description |
|---|---|
| IEnumerable<Type> | An enumeration of all inner System.Type |
IsClass(Type)
Tests if a type is a class
Declaration
public static bool IsClass(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type is a class |
IsDeclaredMember<T>(T)
Test if a class member is actually an concrete implementation
Declaration
public static bool IsDeclaredMember<T>(this T member) where T : MemberInfo
Parameters
| Type | Name | Description |
|---|---|---|
| T | member | A member |
Returns
| Type | Description |
|---|---|
| bool | True if the member is a declared |
Type Parameters
| Name | Description |
|---|---|
| T |
IsFloatingPoint(Type)
Tests if a type is a floating point type
Declaration
public static bool IsFloatingPoint(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type represents some floating point |
IsInteger(Type)
Tests if a type is an integer type
Declaration
public static bool IsInteger(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type represents some integer |
IsNumber(Type)
Tests if a type is a numerical type
Declaration
public static bool IsNumber(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type represents some number |
IsOfNullableType<T>(T)
Test whether an instance is of a nullable type
Declaration
public static bool IsOfNullableType<T>(T instance)
Parameters
| Type | Name | Description |
|---|---|---|
| T | instance | An instance to test |
Returns
| Type | Description |
|---|---|
| bool | True if instance is of nullable type, false if not |
Type Parameters
| Name | Description |
|---|---|
| T | Type of instance |
IsStatic(MemberInfo)
Tests whether a type or member is static, as defined in C#
Declaration
public static bool IsStatic(MemberInfo member)
Parameters
| Type | Name | Description |
|---|---|---|
| MemberInfo | member | The type or member |
Returns
| Type | Description |
|---|---|
| bool | True if the type or member is static |
IsStruct(Type)
Tests if a type is a struct
Declaration
public static bool IsStruct(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type is a struct |
IsValue(Type)
Tests if a type is a value type
Declaration
public static bool IsValue(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type is a value type |
IsVoid(Type)
Tests if a type is void
Declaration
public static bool IsVoid(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type |
Returns
| Type | Description |
|---|---|
| bool | True if the type is void |
MakeDeepCopy(object, Type, Func<string, Traverse, Traverse, object>, string)
Makes a deep copy of any object
Declaration
public static object MakeDeepCopy(object source, Type resultType, Func<string, Traverse, Traverse, object> processor = null, string pathRoot = "")
Parameters
| Type | Name | Description |
|---|---|---|
| object | source | The original object |
| Type | resultType | The type of the instance that should be created |
| Func<string, Traverse, Traverse, object> | processor | Optional value transformation function (taking a field name and src/dst Traverse instances) |
| string | pathRoot | The optional path root to start with |
Returns
| Type | Description |
|---|---|
| object | The copy of the original object |
MakeDeepCopy<T>(object)
Makes a deep copy of any object
Declaration
public static T MakeDeepCopy<T>(object source) where T : class
Parameters
| Type | Name | Description |
|---|---|---|
| object | source | The original object |
Returns
| Type | Description |
|---|---|
| T | A copy of the original object but of type T |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the instance that should be created; for legacy reasons, this must be a class or interface |
MakeDeepCopy<T>(object, out T, Func<string, Traverse, Traverse, object>, string)
Makes a deep copy of any object
Declaration
public static void MakeDeepCopy<T>(object source, out T result, Func<string, Traverse, Traverse, object> processor = null, string pathRoot = "")
Parameters
| Type | Name | Description |
|---|---|---|
| object | source | The original object |
| T | result | [out] The copy of the original object |
| Func<string, Traverse, Traverse, object> | processor | Optional value transformation function (taking a field name and src/dst Traverse instances) |
| string | pathRoot | The optional path root to start with |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the instance that should be created |
Method(string, Type[], Type[])
Gets the reflection information for a method by searching the type and all its super types
Declaration
public static MethodInfo Method(string typeColonName, Type[] parameters = null, Type[] generics = null)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
| Type[] | parameters | Optional parameters to target a specific overload of the method |
| Type[] | generics | Optional list of types that define the generic version of the method |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when the method cannot be found |
Method(Type, string, Type[], Type[])
Gets the reflection information for a method by searching the type and all its super types
Declaration
public static MethodInfo Method(Type type, string name, Type[] parameters = null, Type[] generics = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type where the method is declared |
| string | name | The name of the method (case sensitive) |
| Type[] | parameters | Optional parameters to target a specific overload of the method |
| Type[] | generics | Optional list of types that define the generic version of the method |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the method cannot be found |
MethodDelegate<DelegateType>(MethodInfo, object, bool, Type[])
Creates a delegate to a given method
Declaration
public static DelegateType MethodDelegate<DelegateType>(MethodInfo method, object instance = null, bool virtualCall = true, Type[] delegateArgs = null) where DelegateType : Delegate
Parameters
| Type | Name | Description |
|---|---|---|
| MethodInfo | method | The method to create a delegate from. |
| object | instance | Only applies for instance methods. If |
| bool | virtualCall | Only applies for instance methods. If |
| Type[] | delegateArgs | Only applies for instance methods, and if argument |
Returns
| Type | Description |
|---|---|
| DelegateType |
Type Parameters
| Name | Description |
|---|---|
| DelegateType | The delegate Type |
Remarks
Delegate invocation is more performant and more convenient to use than System.Reflection.MethodBase.Invoke(object, object[]) at a one-time setup cost.
Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods, and both class and struct methods.
MethodDelegate<DelegateType>(string, object, bool, Type[])
Creates a delegate to a given method
Declaration
public static DelegateType MethodDelegate<DelegateType>(string typeColonName, object instance = null, bool virtualCall = true, Type[] delegateArgs = null) where DelegateType : Delegate
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The method in the form |
| object | instance | Only applies for instance methods. If |
| bool | virtualCall | Only applies for instance methods. If |
| Type[] | delegateArgs | Only applies for instance methods, and if argument |
Returns
| Type | Description |
|---|---|
| DelegateType |
Type Parameters
| Name | Description |
|---|---|
| DelegateType | The delegate Type |
Remarks
Delegate invocation is more performant and more convenient to use than System.Reflection.MethodBase.Invoke(object, object[]) at a one-time setup cost.
Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods, and both class and struct methods.
Property(string)
Gets the reflection information for a property by searching the type and all its super types
Declaration
public static PropertyInfo Property(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| PropertyInfo | A property or null when the property cannot be found |
Property(Type, string)
Gets the reflection information for a property by searching the type and all its super types
Declaration
public static PropertyInfo Property(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| string | name | The name |
Returns
| Type | Description |
|---|---|
| PropertyInfo | A property or null when type/name is null or when the property cannot be found |
PropertyGetter(string)
Gets the reflection information for the getter method of a property by searching the type and all its super types
Declaration
public static MethodInfo PropertyGetter(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
PropertyGetter(Type, string)
Gets the reflection information for the getter method of a property by searching the type and all its super types
Declaration
public static MethodInfo PropertyGetter(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| string | name | The name |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
PropertySetter(string)
Gets the reflection information for the setter method of a property by searching the type and all its super types
Declaration
public static MethodInfo PropertySetter(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
PropertySetter(Type, string)
Gets the reflection information for the setter method of a property by searching the type and all its super types
Declaration
public static MethodInfo PropertySetter(Type type, string name)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The class/type |
| string | name | The name |
Returns
| Type | Description |
|---|---|
| MethodInfo | A method or null when type/name is null or when the property cannot be found |
RethrowException(Exception)
Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces)
Declaration
public static void RethrowException(Exception exception)
Parameters
| Type | Name | Description |
|---|---|---|
| Exception | exception | The exception to rethrow |
StaticFieldRefAccess<F>(FieldInfo)
Creates a static field reference delegate
Declaration
public static AccessTools.FieldRef<F> StaticFieldRefAccess<F>(FieldInfo fieldInfo)
Parameters
| Type | Name | Description |
|---|---|---|
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| AccessTools.FieldRef<F> | A readable/assignable AccessTools.FieldRef<F> delegate |
Type Parameters
| Name | Description |
|---|---|
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
StaticFieldRefAccess<F>(string)
Creates a static field reference
Declaration
public static ref F StaticFieldRefAccess<F>(string typeColonName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | typeColonName | The member in the form |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| F | The type of the field |
StaticFieldRefAccess<F>(Type, string)
Creates a static field reference
Declaration
public static ref F StaticFieldRefAccess<F>(Type type, string fieldName)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type (can be class or struct) the field is defined in |
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
StaticFieldRefAccess<T, F>(FieldInfo)
Creates a static field reference
Declaration
public static ref F StaticFieldRefAccess<T, F>(FieldInfo fieldInfo)
Parameters
| Type | Name | Description |
|---|---|---|
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | An arbitrary type (by convention, the type the field is defined in) |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
The type parameter T is only used in exception messaging and to distinguish between this method overload
and the StaticFieldRefAccess<F>(FieldInfo) overload (which returns a AccessTools.FieldRef<F> rather than a reference).
StaticFieldRefAccess<T, F>(string)
Creates a static field reference
Declaration
public static ref F StaticFieldRefAccess<T, F>(string fieldName)
Parameters
| Type | Name | Description |
|---|---|---|
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | The type (can be class or struct) the field is defined in |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
StructFieldRefAccess<T, F>(FieldInfo)
Creates a field reference delegate for an instance field of a struct
Declaration
public static AccessTools.StructFieldRef<T, F> StructFieldRefAccess<T, F>(FieldInfo fieldInfo) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| AccessTools.StructFieldRef<T, F> | A readable/assignable AccessTools.StructFieldRef<T, F> delegate |
Type Parameters
| Name | Description |
|---|---|
| T | The struct that defines the instance field |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for cases where the field has already been obtained, avoiding the field searching cost in e.g. StructFieldRefAccess<T, F>(string).
StructFieldRefAccess<T, F>(string)
Creates a field reference delegate for an instance field of a struct
Declaration
public static AccessTools.StructFieldRef<T, F> StructFieldRefAccess<T, F>(string fieldName) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| AccessTools.StructFieldRef<T, F> | A readable/assignable AccessTools.StructFieldRef<T, F> delegate |
Type Parameters
| Name | Description |
|---|---|
| T | The struct that defines the instance field |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
StructFieldRefAccess<T, F>(ref T, FieldInfo)
Creates a field reference for an instance field of a struct
Declaration
public static ref F StructFieldRefAccess<T, F>(ref T instance, FieldInfo fieldInfo) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| T | instance | The instance |
| FieldInfo | fieldInfo | The field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | The struct that defines the instance field |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained.
If you need to access a field's value for potentially multiple instances, use StructFieldRefAccess<T, F>(FieldInfo) instead.
StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance).
StructFieldRefAccess<T, F>(ref T, string)
Creates an instance field reference for a specific instance of a struct
Declaration
public static ref F StructFieldRefAccess<T, F>(ref T instance, string fieldName) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| T | instance | The instance |
| string | fieldName | The name of the field |
Returns
| Type | Description |
|---|---|
| F | A readable/assignable reference to the field |
Type Parameters
| Name | Description |
|---|---|
| T | The struct that defines the instance field |
| F | The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), a type that is assignable from that type; or if the field's type is an enum type, either that type or the underlying integral type of that enum type |
Remarks
This method is meant for one-off access to a field's value for a single instance.
If you need to access a field's value for potentially multiple instances, use StructFieldRefAccess<T, F>(string) instead.
StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance).
ThrowMissingMemberException(Type, params string[])
Throws a missing member runtime exception
Declaration
public static void ThrowMissingMemberException(Type type, params string[] names)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type that is involved |
| string[] | names | A list of names |
TypeByName(string)
Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise
Declaration
public static Type TypeByName(string name)
Parameters
| Type | Name | Description |
|---|---|---|
| string | name | The name |
Returns
| Type | Description |
|---|---|
| Type | A type or null if not found |
TypeSearch(Regex, bool)
Searches a type by regular expression; for exact searching, use TypeByName(string)
Declaration
public static Type TypeSearch(Regex search, bool invalidateCache = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Regex | search | The regular expression that matches against Type.FullName or Type.Name |
| bool | invalidateCache | Refetches the cached types if set to true |
Returns
| Type | Description |
|---|---|
| Type | The first type where FullName or Name matches the search |