在 C# 中用 Bool TryParse() 替换条件

0 c# winforms

我试图用 bool TryParse(); 替换以下内容

result = table1.Columns.Contains("data1") ?
         (table1.Rows[0]["data1"].ToString().ToLower().Equals("true") ? true : false) :
         result;
Run Code Online (Sandbox Code Playgroud)

问题是,如果没有“data1”,它返回 false(实际上应该为 null),否则返回 true。如果没有 data1,我希望将“结果”分配为空。

jmc*_*ney 5

编辑:

我原封不动地保留了原来的答案,但我认为我误解了一些东西。假设该data1列可为空,并且您想要一个 NULL 字段(实际上包含DBNull.Value, )来生成 C# null,那么您可以执行以下操作:

table1.Rows[0].IsNull("data1")
    ? (bool?)null
    : bool.TryParse(table1.Rows[0].Field<string>("data1"), out var data1) && data1
Run Code Online (Sandbox Code Playgroud)

这将首先检查 NULL,然后解析string是否有。当然,如果您希望值能够为null,则数据类型为 nowbool?而不是bool

原来的:

您可以在传递参数时声明内联变量,以便可以像这样out测试布尔值:string

if (bool.TryParse(text, out var flag) && flag)
Run Code Online (Sandbox Code Playgroud)

TryParsetrue如果text解析成功将返回,然后flag将是trueor false。这意味着:

table1.Rows[0]["data1"].ToString().ToLower().Equals("true") ? true : false
Run Code Online (Sandbox Code Playgroud)

会变成这样:

bool.TryParse(table1.Rows[0]["data1"].ToString(), out var data1) && data1
Run Code Online (Sandbox Code Playgroud)

请注意,如果输入无法解析,第一个表达式将是falseso 整个事情将是false。如果输入解析成功,则整个内容与第二个表达式具有相同的值。

我应该提到,这样的内联声明并不总是可行,但是,如果有人使用的 C# 版本足够旧,那么他们可能应该升级。

  • 那么这个返回“null”是如何像Op所要求的那样呢? (2认同)
  • @Fildor,不会有例外,因为数据库空值由“DBNull.Value”表示,而“DBNull.ToString”返回“string.Empty”。斯蒂尔,我想无论如何我可能都误解了这个问题。我会更新我的答案。 (2认同)