我想检查一个文件是否存在,如果它不复制文件则不会执行任何操作。这是我的代码,但是我遇到了编译错误,例如
Only assignment, call increment, decrement and new object expressions can be used as a statement
Invalid expression return
Invalid expression term ':'
; Expected
这是我的语法
string template = "C:\\Test\\database12.mdb";
string dest = "R:\\Production\\database12.mdb";
if (File.Exists(dest) ? return : File.Copy(template, dest));
答案 0 :(得分:2)
条件运算符(? :
)是一个运算符,它返回一个值,不能用于控制程序流。使用标准的if-else代替:
if (File.Exists(dest))
return;
else
File.Copy(template, dest);
可以简化为:
if (File.Exists(dest))
return;
File.Copy(template, dest);
或只是
if (!File.Exists(dest))
File.Copy(template, dest);
假设文件复制后没有任何内容。
答案 1 :(得分:1)
您正在使用Conditional Operator来指定当时/其他行为,这是无效的。
?:
运算符用于获取取决于bool的值。因此,您应该从一对具有相同类型的选项中获取对象。
如果希望 logic 分支,则需要使用if
语句,其中的synatx为
if(condition)
{
// Do true stuff here
}
else
{
// Do false stuff here
}
答案 2 :(得分:-1)
条件运算符
var result = x ? y : z;
可以被视为
之类的快捷方式T result;
if (x)
result = y;
else
result = z;
T
是y
和z
的类型。这表明y
和z
必须解析为相同类型的值(而不是语句)整个语句具有一致的类型。
这也清楚地表明,您不能简单地使用y
或z
的任何方法调用,而只能使用导致相同类型的值的方法调用。
所以虽然可以写
var value = condition ? func1() : func2(someValue);
只要func1
和func2
是返回相同类型值的方法,就不能写
var value = condition ? return : null;
return
不是值,您不能将return
用作条件运算符中的操作数之一。你甚至可能不这样做:
var value = condition ? return true : false;
你甚至可以这样做:
if ((File.Exists(dest) ? CalcFileSize(dest) : 0) > 0)
{
// Do something if the file exists and it has content
}
在这种情况下,使用好的if
更容易(也更正确):
if (File.Exists(dest))
return;
File.Copy(template, dest);