Вот что я хочу сделать:
XmlWriter writer = XmlWriter.Create(
(string.IsNullOrEmpty(outfile) ? Console.Out : outfile)
);
Это не компилируется, однако, выдает ошибку «Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между« System.IO.TextWriter »и« string »». Приведенный выше код является упрощением следующего:
XmlWriter writer;
if (string.IsNullOrEmpty(outfile))
{
writer = XmlWriter.Create(Console.Out); // Constructor takes TextWriter
}
else
{
writer = XmlWriter.Create(outfile); // Constructor takes string
}
Эти два вызова Create
совершенно допустимы, и это компилируется. Есть ли способ сделать это более компактным, как я пытался сделать с помощью встроенного теста?
Мне не имеет смысла, что то, что я хочу, не работает. Мысленно обдумывая это, кажется, что компилятор оценит string.IsNullOrEmpty(outfile)
, чтобы определить, какой случай взять:
- Если бы условие было истинным, оно пошло бы с
Console.Out
, а затем увидело, что ему нужно полиморфно выбрать версию XmlWriter.Create
, которая принимает TextWriter.
- Если бы условие было ложным, оно пошло бы с
outfile
, а затем увидело, что ему нужно полиморфно выбрать версию XmlWriter.Create
, которая принимает строку.
Не исказило ли программирование в ML мой мозг?