如果File.Exists = True则不执行任何其他复制

时间:2015-04-07 19:50:23

标签: c#

我想检查一个文件是否存在,如果它不复制文件则不会执行任何操作。这是我的代码,但是我遇到了编译错误,例如

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));

3 个答案:

答案 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;

Tyz的类型。这表明yz必须解析为相同类型(而不是语句)整个语句具有一致的类型。

这也清楚地表明,您不能简单地使用yz的任何方法调用,而只能使用导致相同类型的的方法调用。

所以虽然可以写

var value = condition ? func1() : func2(someValue);

只要func1func2是返回相同类型值的方法,就不能写

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);