I think a more generic approach to waiting for an element would be better for your uses. So instead use a generic expression and pass in your search criteria. For example:
public void WaitForElementById(string elementId, int timeout = 5)
{
//Where '_driver' is the instance of your WebDriver
WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 0, timeout));
IWebElement element = _wait.Until(x => x.FindElement(By.Id(elementId)));
}
This will throw an exception if the wait times out so you could also adding in a try/catch to report failings differently. I personally use this in my testing solution within a switch that has a case for each of my commonly used search types. I then pass in the search type and the search term (eg, elementAttribute ID, string myTextboxID).
With that said, I can't see anything obviously wrong with your code that would cause it not to work.