Сообщение Re[12]: Приоритет вызова перегруженных методов от 08.06.2016 13:10
Изменено 08.06.2016 15:14 Serginio1
Здравствуйте, Sinix, Вы писали:
Попробую я сортировку с компарером
Сортировка типов получается такая.
+ [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}
Изменяет первый элемент массива.
Попробую я сортировку с компарером
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, Вы писали:
Попробую я сортировку с компарером
Сортировка типов получается такая.
+ [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}
Изменяет первый элемент массива.
Можно сортировать как 1000- уровень иерархии от Object
Попробую я сортировку с компарером
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