Информация об изменениях

Сообщение Re[12]: Приоритет вызова перегруженных методов от 08.06.2016 13:10

Изменено 08.06.2016 15:14 Serginio1

Здравствуйте, Sinix, Вы писали:

Попробую я сортировку с компарером


 public class MyComparer : IComparer<Type>
    {

        public int Compare(Type TypeA, Type TypeB)
        {
            if (TypeA.IsAssignableFrom(TypeB)) return 1;

            if (TypeB.IsAssignableFrom(TypeA)) return -1;

            if (TypeA.IsByRef) return -1;

            if (TypeB.IsByRef) return  1;

            return 0;
        }

    }



Сортировка типов получается такая.

var Comp = new MyComparer();
var tt = (new Type[] { typeof(int), typeof(int).MakeByRefType(),  typeof(double), typeof(object), typeof(string) }).OrderBy(t=>t, Comp).ToArray();


+ [0] {Name = "Int32&" FullName = "System.Int32&"} System.Type {System.RuntimeType}
+ [1] {Name = "Int32" FullName = "System.Int32"} System.Type {System.RuntimeType}
+ [2] {Name = "Double" FullName = "System.Double"} System.Type {System.RuntimeType}
+ [3] {Name = "String" FullName = "System.String"} System.Type {System.RuntimeType}
+ [4] {Name = "Object" FullName = "System.Object"} System.Type {System.RuntimeType}




var Method = typeof(DynamicCall).GetMethod("CallA", new Type[] { typeof(int).MakeByRefType(), typeof(double) });

            object[] парам= new object[] { i,d};
            res = Method.Invoke(null, парам);


Изменяет первый элемент массива.
Re[12]: Приоритет вызова перегруженных методов
Здравствуйте, Sinix, Вы писали:

Попробую я сортировку с компарером


 public class MyComparer : IComparer<Type>
    {

        public int Compare(Type TypeA, Type TypeB)
        {
            if (TypeA.IsAssignableFrom(TypeB)) return 1;

            if (TypeB.IsAssignableFrom(TypeA)) return -1;

            if (TypeA.IsByRef) return -1;

            if (TypeB.IsByRef) return  1;

            return 0;
        }

    }



Сортировка типов получается такая.

var Comp = new MyComparer();
var tt = (new Type[] { typeof(int), typeof(int).MakeByRefType(),  typeof(double), typeof(object), typeof(string) }).OrderBy(t=>t, Comp).ToArray();


+ [0] {Name = "Int32&" FullName = "System.Int32&"} System.Type {System.RuntimeType}
+ [1] {Name = "Int32" FullName = "System.Int32"} System.Type {System.RuntimeType}
+ [2] {Name = "Double" FullName = "System.Double"} System.Type {System.RuntimeType}
+ [3] {Name = "String" FullName = "System.String"} System.Type {System.RuntimeType}
+ [4] {Name = "Object" FullName = "System.Object"} System.Type {System.RuntimeType}




var Method = typeof(DynamicCall).GetMethod("CallA", new Type[] { typeof(int).MakeByRefType(), typeof(double) });

            object[] парам= new object[] { i,d};
            res = Method.Invoke(null, парам);


Изменяет первый элемент массива.


Можно сортировать как 1000- уровень иерархии от Object