using System.Collections.Generic;
public Task(string name, params string[] dependencies)
Dependencies = dependencies;
public string Name { get; }
public string[] Dependencies { get; }
public override string ToString()
public class TaskComparer: IComparer<Task>
public virtual int Compare(Task t1, Task t2)
if (t1.Dependencies.Contains(t2.Name))
if (t2.Dependencies.Contains(t1.Name))
public static void Main()
new Task("task_a", "task_c"),
new Task("task_b", "task_c"),
new Task("task_c", "task_e"),
new Task("task_d", "task_a", "task_e"),
var sortedList = tasks.OrderBy(t => t, new TaskComparer()).ToList();
foreach (Task t in sortedList)
Console.WriteLine(t.Name);
new Task("task_a", "task_b", "task_c"),
new Task("task_c", "task_b"),
sortedList = tasks.OrderBy(t => t, new TaskComparer()).ToList();
foreach (Task t in sortedList)
Console.WriteLine(t.Name);