A bit of a reimagining but I think will help.
Selenium actually has a smart wait helper package called DotNetSeleniumExtras.WaitHelpers
.
You can greatly simplify your code to just
private void WaitFor(IWebDriver driver, By by, TimeSpan wait)
{
var smartWait = new WebDriverWait(driver, wait);
smartWait.Until(ExpectedConditions.ElementExists(by));
}
Usage:
WaitFor(driver, By.XPath(".//*[@id='content']"), TimeSpan.FromSeconds(10));
This way you keep all parameters as open as you need them to be. The driver is always necessary. The search criteria still let you use any available search patterns like by CSS or by id, and the explicit timespan lets you understand the delay time at a glance.