Как вернуть из функции ответ return разного типа?
Если генерируете некий List, то при не критической ошибке (файл пуст), стоит возвращать пустой List. Если ошибка критическая (файл не найден, невозможно открыть файл на чтение, невалидный аргумент, нулевой аргумент),  то нужно бросать исключение.private static List<SomeType> ReadFromFile(string path) {
    if (path == null) {
        throw new ArgumentNullException("path");
    }
    if (File.Exists(path)) {
        string file = File.ReadAllText(path);
        ...
    } else {
        throw new FileNotFoundException(path);
    }
}
Тогда в вызывающем коде можно делать проверки:private void  doTheBestBtn_Click(object sender, EventArgs e)
{
    try {
        var myList = ReadFromFile(txtInput.Text);
        ...
    }
    catch(ArgumentNullException ex) {
        MessageBox.Show("Необходимо указать путь к файлу!");
    }
    catch(FileNotFoundException ex) {
        MessageBox.Show("Указанный файл не найден!");
    }
}
PS File.ReadAllText сам бросает некоторые исключения, но допустим, что это самопальный тип.
Так не делают, но если хочется:private static object OpenFile(string file)
{
...
}
И затемvar res = OpenFile(file);
if (res.GetType() == typeof(string))
{
   var error = (string)res;
}UPD:
Как делается:
1. Определяете свой класс, для примераclass ErrorStatus
{
   public bool Status { get; private set; }
   public string ErrorMessage { get; private set; }

  public ErrorStatus(bool status, string errormessage)
  {
     Status = status;
     ErrorMessage = errormessage;
  }
}
2. И возращаете ужеprivate static ErrorStatus OpenFile(string file, out List<string> data)
{
...
}