Won't this work?
public IEnumerable<(Class1?, Class2?)> DoSmth()
{
foreach (...)
{
var output = DoComplexCalc();
if (output.Whatever)
{
yield return (new Class1(output), null);
}
else
{
yield return (null, new Class2(output));
}
}
}