Bringing up to date.
Brought everything up to date with 0.437.0.406875 and made some improvements.
This commit is contained in:
79
Utility/ImplicitMember.cs
Normal file
79
Utility/ImplicitMember.cs
Normal file
@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace RobloxFiles.Utility
|
||||
{
|
||||
// This is a lazy helper class to disambiguate between FieldInfo and PropertyInfo
|
||||
internal class ImplicitMember
|
||||
{
|
||||
private static BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase;
|
||||
private object member;
|
||||
|
||||
private ImplicitMember(FieldInfo field) { member = field; }
|
||||
private ImplicitMember(PropertyInfo prop) { member = prop; }
|
||||
|
||||
public static ImplicitMember Get(Type type, string name)
|
||||
{
|
||||
var field = type.GetField(name, flags);
|
||||
var prop = type.GetProperty(name, flags);
|
||||
|
||||
if (field != null)
|
||||
return new ImplicitMember(field);
|
||||
else if (prop != null)
|
||||
return new ImplicitMember(prop);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Type MemberType
|
||||
{
|
||||
get
|
||||
{
|
||||
Type result = null;
|
||||
|
||||
if (member is FieldInfo)
|
||||
{
|
||||
var field = member as FieldInfo;
|
||||
result = field.FieldType;
|
||||
}
|
||||
else if (member is PropertyInfo)
|
||||
{
|
||||
var prop = member as PropertyInfo;
|
||||
result = prop.PropertyType;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public object GetValue(object obj)
|
||||
{
|
||||
if (member is FieldInfo)
|
||||
{
|
||||
var field = member as FieldInfo;
|
||||
return field.GetValue(obj);
|
||||
}
|
||||
else if (member is PropertyInfo)
|
||||
{
|
||||
var prop = member as PropertyInfo;
|
||||
return prop.GetValue(obj);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void SetValue(object obj, object value)
|
||||
{
|
||||
if (member is FieldInfo)
|
||||
{
|
||||
var field = member as FieldInfo;
|
||||
field.SetValue(obj, value);
|
||||
}
|
||||
else if (member is PropertyInfo)
|
||||
{
|
||||
var prop = member as PropertyInfo;
|
||||
prop.SetValue(obj, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user