在阅读 stackoverflow 后,在检查 DateTime 格式的情况下,您应该使用 DateTime.TryParse。在尝试了一些正则表达式之后,他们似乎变得又长又讨厌,想要涵盖很多格式。
但是 TryParse 需要一个“out”参数,因为我只想进行验证格式检查,所以不需要实际结果。
所以我只剩下一个变量来保存“输出”结果,我什么也不做。有没有办法让我不必做一个输出参数?
所以我摆脱了这个警告,不再让一个变量到处乱飞。
在阅读 stackoverflow 后,在检查 DateTime 格式的情况下,您应该使用 DateTime.TryParse。在尝试了一些正则表达式之后,他们似乎变得又长又讨厌,想要涵盖很多格式。
但是 TryParse 需要一个“out”参数,因为我只想进行验证格式检查,所以不需要实际结果。
所以我只剩下一个变量来保存“输出”结果,我什么也不做。有没有办法让我不必做一个输出参数?
所以我摆脱了这个警告,不再让一个变量到处乱飞。
使用 C#7.0(自 2016 年 8 月起),您可以使用 out var 构造,然后在后续代码中忽略新的 var。
bool success = DateTime.TryParse(value, out var result);
如果您真的不关心结果的值,请使用discards:
bool success = DateTime.TryParse(value, out _);
没有。我会将它包装在某个方法中,以将噪音排除在主流之外:
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()
}
我并不是建议您实际执行此操作,但您可以使用单个帮助器类来简化所有输出参数:
public static class OutHelper<T>
{
[ThreadStatic]
public static T Ignored;
}
然后你可以调用:
if (DateTime.TryParse(text, out OutHelper<DateTime>.Ignored))
这太可怕了,使用公共可变字段,并且如果您的应用程序还使用一些恶意代码执行,它会使该代码访问您解析的最后一个值......但它应该可以工作:)
不,你不能摆脱这个变量,但你也不应该得到编译器警告。
out
按“使用”变量的方式传递变量。因此编译器不会发出警告。
如果您使用的是 .NET 3 及更高版本,您总是可以创建一个扩展方法吗?
public static bool IsValidDate(this string value)
{
DateTime date = DateTime.Null;
return DateTime.TryParse(value, out date);
}
[编辑以将方法名称重命名为更合适的名称]
TryParse
是更好的选择。它只是一个被浪费的变量。其他选项包括Convert.ToDateTime()
在 try-catch 块中使用。但这又一次效率不高,因为 try-catch 块意味着很重。下一个选项是正则表达式。这是一个更好的解决方案。我想与其他人相比,这会立即为您提供结果。
您可以像 Kim Grasman 所说的那样很好地包装方法......