这是我想做的:
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
一起使用,然后看到它需要以多态方式选择采用 TextWriter 的XmlWriter.Create
版本. - 如果条件为假,它将与
outfile
一起使用,然后看到它需要以多态方式选择采用字符串的XmlWriter.Create
版本。
机器学习编程是否扭曲了我的大脑?
最佳答案
您不能这样做的原因是因为编译器必须在编译时选择要使用的 Create 重载 - 您的方法将要求它在运行时完成。你能做到的最短可能是:
XmlWriter writer = String.IsNullOrEmpty(outfile)
? XmlWriter.Create(Console.Out)
: XmlWriter.Create(outfile);
关于c# - 为什么我不能紧凑地使用我想要的 C# 多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1615351/