なぜ私は希望のC#多型でコンパクトにすることができないのですか?
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
}
これら2つのCreate
呼び出しは完全に有効で、これはコンパイルされます。私はインラインテストでやっているように、もっとコンパクトにする方法はありますか?
私が望むものはうまくいかないと私には分かりません。
- 条件が真であれば、
Console.Out
と一緒に行き、次にそれを多相的に選択する必要があることがわかります。 TextWriterをとるXmlWriter.Create
- 条件がfalseの場合は、
outfile
と一緒に移動し、文字列をとるXmlWriter.Create
のバージョンを多態的に選択する必要があることがわかります。
MLのプログラミングは私の脳を歪ませましたか?
コンパイラは、コンパイル時にクラス/メソッド名と引数を選択しますが、実行時にcallvirt IL命令でそのメソッドの実装を多態的に選択します。 –