more cleanup
This commit is contained in:
parent
af441e772b
commit
77832db39d
28 changed files with 45 additions and 105 deletions
|
@ -6,19 +6,19 @@ namespace System
|
|||
{
|
||||
public static class ObjectExtensions
|
||||
{
|
||||
private static readonly MethodInfo CloneMethod = typeof(Object).GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
private static readonly MethodInfo CloneMethod = typeof(object).GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
public static bool IsPrimitive(this Type type)
|
||||
{
|
||||
if (type == typeof(String)) return true;
|
||||
return (type.IsValueType & type.IsPrimitive);
|
||||
if (type == typeof(string)) return true;
|
||||
return type.IsValueType && type.IsPrimitive;
|
||||
}
|
||||
|
||||
public static Object Copy(this Object originalObject)
|
||||
public static object Copy(this object originalObject)
|
||||
{
|
||||
return InternalCopy(originalObject, new Dictionary<Object, Object>(new ReferenceEqualityComparer()));
|
||||
return InternalCopy(originalObject, new Dictionary<object, object>(new ReferenceEqualityComparer()));
|
||||
}
|
||||
private static Object InternalCopy(Object originalObject, IDictionary<Object, Object> visited)
|
||||
private static object InternalCopy(object originalObject, IDictionary<object, object> visited)
|
||||
{
|
||||
if (originalObject == null) return null;
|
||||
var typeToReflect = originalObject.GetType();
|
||||
|
@ -29,7 +29,7 @@ namespace System
|
|||
if (typeToReflect.IsArray)
|
||||
{
|
||||
var arrayType = typeToReflect.GetElementType();
|
||||
if (IsPrimitive(arrayType) == false)
|
||||
if (!IsPrimitive(arrayType))
|
||||
{
|
||||
Array clonedArray = (Array)cloneObject;
|
||||
clonedArray.ForEach((array, indices) => array.SetValue(InternalCopy(clonedArray.GetValue(indices), visited), indices));
|
||||
|
@ -55,7 +55,7 @@ namespace System
|
|||
{
|
||||
foreach (FieldInfo fieldInfo in typeToReflect.GetFields(bindingFlags))
|
||||
{
|
||||
if (filter != null && filter(fieldInfo) == false) continue;
|
||||
if (filter != null && !filter(fieldInfo)) continue;
|
||||
if (IsPrimitive(fieldInfo.FieldType)) continue;
|
||||
var originalFieldValue = fieldInfo.GetValue(originalObject);
|
||||
var clonedFieldValue = InternalCopy(originalFieldValue, visited);
|
||||
|
@ -64,11 +64,11 @@ namespace System
|
|||
}
|
||||
public static T Copy<T>(this T original)
|
||||
{
|
||||
return (T)Copy((Object)original);
|
||||
return (T)Copy((object)original);
|
||||
}
|
||||
}
|
||||
|
||||
public class ReferenceEqualityComparer : EqualityComparer<Object>
|
||||
public class ReferenceEqualityComparer : EqualityComparer<object>
|
||||
{
|
||||
public override bool Equals(object x, object y)
|
||||
{
|
||||
|
@ -88,7 +88,7 @@ namespace System
|
|||
public static void ForEach(this Array array, Action<Array, int[]> action)
|
||||
{
|
||||
if (array.LongLength == 0) return;
|
||||
ArrayTraverse walker = new ArrayTraverse(array);
|
||||
ArrayTraverse walker = new(array);
|
||||
do action(array, walker.Position);
|
||||
while (walker.Step());
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ namespace System
|
|||
internal class ArrayTraverse
|
||||
{
|
||||
public int[] Position;
|
||||
private int[] maxLengths;
|
||||
private readonly int[] maxLengths;
|
||||
|
||||
public ArrayTraverse(Array array)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue