как назвать общий метод, я слышал об отражении, но я думаю, что я делаю неправильно, проверьте пожалуйста.Call generic method C#
public static LinkedListNode<T> MergeSortLL<T>(LinkedListNode<T> Head) where T : IComparable<T>
{
if (Head == null || Head.Next == null)
{
return Head;
}
LinkedListNode<T> middle = GetMiddle<T>(Head);
LinkedListNode<T> half = middle.Next;
middle.Next = null;
return Merge(Head, half);
}
И вот я пытаюсь вызвать мой общий метод с параметрами
public void MSort()
{
Type type = typeof(MergeSort);
MethodInfo method = typeof(MergeSort).GetMethod("MergeSortLL");
MethodInfo generic = method.MakeGenericMethod(type);
generic.Invoke(null, null);
}
Update 2. Здесь больше информации, что я в моем классе и почему слиянием я использую IComparable
class MergeSort
{
public static LinkedListNode<T> MergeSortLL<T>(LinkedListNode<T> Head) where T : IComparable<T>
{
if (Head == null || Head.Next == null)
{
return Head;
}
LinkedListNode<T> middle = GetMiddle<T>(Head);
LinkedListNode<T> half = middle.Next;
middle.Next = null;
return Merge(Head, Head, half);
}
public static LinkedListNode<T> Merge<T>(LinkedListNode<T> Head, LinkedListNode<T> Left, LinkedListNode<T> Right) where T : IComparable<T>
{
LinkedListNode<T> mHead = Head;
LinkedListNode<T> curr = mHead;
while (Left != null && Right != null)
{
if (Left.Value.CompareTo(Right.Value) <= 0)
{
curr.Next = Left;
Left = Left.Next;
}
else
{
curr.Next = Right;
Right = Right.Next;
}
curr = curr.Next;
}
curr.Next = (Left == null) ? Right : Left;
return mHead.Next;
}
public static LinkedListNode<T> GetMiddle<T>(LinkedListNode<T> Head) where T : IComparable<T>
{
if (Head == null)
{
return Head;
}
LinkedListNode<T> slow, fast;
slow = fast = Head;
while (fast.Next != null && fast.Next.Next != null)
{
slow = slow.Next; fast = fast.Next.Next;
}
return slow;
}
}
Вы можете посмотреть на эту должность в StackOverflow http://stackoverflow.com/questions/3957817/calling-generic-method-with-type-variable – Sidharh
Просто 'результат вар = MergeSort.MergeSorLL (HeadNodeOfLinkedList) ; 'Дженерики будут выходить – juharr
Дженерики и отражение не смешиваются хорошо. Если вы не знаете тип, вы не можете ничего сделать с _output_ во время компиляции. Если да, то нет необходимости использовать отражение, просто назовите его, как предлагает @juharr. –