Unless the three classes share a base class, you can't pass a collection of them to a method, except as a collection of
object
instances, any more than you could write a method that would take a single instance of any of the three classes, unless there is a direct conversion from A to B and vice versa.
So you could pass a collections of objects:
List<MyClass> obs = new List<MyClass>();
...
MyMethod(obs);
...
public void MyMethod(IEnumerable<object> collection)
{
...
}
But that's a very poor design.
And it's unlikely that there will be a good reason for the three classes you mention to share a common base, so it's not likely that there would be a good design reason to wrote a single method to take a collection of all three classes, as pretty much the first thing it would have to do is find out what it had been passed so it could cast the objects appropriately to use them.
A better - but not much - approach would be to create four overloads:
public void MyMethod(IEnumerable<Candidate> c) { MyMethod(c, null, null); }
public void MyMethod(IEnumerable<Certificates> c) { MyMethod(null, c, null); }
public void MyMethod(IEnumerable<ExamSession> c) { MyMethod(null, null, c); }
public void MyMethod(IEnumerable<Candidate> cand, IEnumerable<Certificates> cert, IEnumerable<ExamSession> es)
{
...
}
As at least that way you can check more easily, and retain some strong typing.
But to be honest you would be better off rethinking this approach.