【问题标题】:Ternary Statement Inline If Not Compiling如果不编译,则内联三元语句
【发布时间】:2014-03-31 20:08:57
【问题描述】:

我正在尝试运行这个内联 if 语句

pRun.StartInfo.FileName = File.Exists("C:\\Test\\Data\\TestingPurposes\\" + UserName 
+ "DailyInfo") ? pRun.StartInfo.UseShellExecute = true : MessageBox.Show("Please 
verify that this file exists");

但我收到以下编译错误:

无法确定条件表达式的类型,因为 'bool' 和 'System.Windows.Forms.DialogResult' 之间没有隐式转换

如何消除此错误并运行以下语句?我想要做的是检查文件是否存在,如果存在,打开它。如果没有,则生成带有所述消息的messagebox

【问题讨论】:

  • 你有一些语法错误,但是你想通过这段代码实现什么?
  • @HamletHakobyan - 我想检查文件是否存在。如果文件确实存在则打开文件,如果不产生所述MessageBox。
  • 为什么你不想在这里使用普通的if 语句?
  • 如果该文件存在,您正在尝试将pRun.StartInfo.UseShellExecute = true 分配给pRun.StartInfo.FileName
  • MessageBox.Show() 不返回布尔值;它返回一个DialogResult。因此,您需要通过比较其值MessageBox.Show(...) == DialogResult.OK 使其成为布尔表达式。也就是说,我不会对三元运算符这样做。这只是一团糟。

标签: c# ternary-operator


【解决方案1】:

为了使用三元运算符,两条语句应该返回相同的类型,或者一种类型应该可以转换为另一种类型。见documentation

first_expression 和 second_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

您需要使用简单的if 语句,它也更可读

if(File.Exists("C:\\Test\\Data\\TestingPurposes\\" + UserName + "DailyInfo"))
{ 
   pRun.StartInfo.UseShellExecute = true   
}
else MessageBox.Show("Please verify that this file exists");

【讨论】:

  • 谢谢 -- 我将使用一个简单的 if 语句。
  • “你的第一个表达式 [...] 没有返回任何内容,它只是一个赋值。” 恐怕这不对,即:bool x; Console.Write(x = true); // trueSee here.
  • @canon 你是对的,我没有仔细考虑。这是完全有效的,感谢您指出,唯一的问题是表达式返回不同的值,并且两者都不能分配或转换为@ 987654326@ 这可能是一个字符串。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2020-06-12
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多