more cleanup

This commit is contained in:
Michele Scandura 2020-11-18 11:22:46 +00:00
parent af441e772b
commit 77832db39d
28 changed files with 45 additions and 105 deletions

View file

@ -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)
{