17

在阅读 stackoverflow 后,在检查 DateTime 格式的情况下,您应该使用 DateTime.TryParse。在尝试了一些正则表达式之后,他们似乎变得又长又讨厌,想要涵盖很多格式。

但是 TryParse 需要一个“out”参数,因为我只想进行验证格式检查,所以不需要实际结果。

所以我只剩下一个变量来保存“输出”结果,我什么也不做。有没有办法让我不必做一个输出参数?

所以我摆脱了这个警告,不再让一个变量到处乱飞。

4

6 回答 6

30

使用 C#7.0(自 2016 年 8 月起),您可以使用 out var 构造,然后在后续代码中忽略新的 var。

bool success = DateTime.TryParse(value, out var result);

如果您真的不关心结果的值,请使用discards

bool success = DateTime.TryParse(value, out _);
于 2017-07-26T14:25:48.497 回答
22

没有。我会将它包装在某个方法中,以将噪音排除在主流之外:

  bool IsValidDate(string value)
  {
     DateTime result;
     return DateTime.TryParse(value, out result); //result is stored, but you only care about the return value of TryParse()
  }
于 2009-09-12T06:33:31.107 回答
7

我并不是建议您实际执行此操作,但您可以使用单个帮助器类来简化所有输出参数:

public static class OutHelper<T>
{
    [ThreadStatic]
    public static T Ignored;
}

然后你可以调用:

if (DateTime.TryParse(text, out OutHelper<DateTime>.Ignored))

这太可怕了,使用公共可变字段,并且如果您的应用程序还使用一些恶意代码执行,它会使该代码访问您解析的最后一个值......但它应该可以工作:)

于 2009-09-12T08:10:41.217 回答
4

不,你不能摆脱这个变量,但你也不应该得到编译器警告。

out按“使用”变量的方式传递变量。因此编译器不会发出警告。

于 2009-09-12T06:35:35.953 回答
4

如果您使用的是 .NET 3 及更高版本,您总是可以创建一个扩展方法吗?

public static bool IsValidDate(this string value)
{
  DateTime date = DateTime.Null;
  return DateTime.TryParse(value, out date);
}

[编辑以将方法名称重命名为更合适的名称]

于 2009-09-12T06:40:34.477 回答
1

TryParse是更好的选择。它只是一个被浪费的变量。其他选项包括Convert.ToDateTime()在 try-catch 块中使用。但这又一次效率不高,因为 try-catch 块意味着很重。下一个选项是正则表达式。这是一个更好的解决方案。我想与其他人相比,这会立即为您提供结果。

您可以像 Kim Grasman 所说的那样很好地包装方法......

于 2009-09-12T06:40:43.383 回答