在读取stackoverflow之后,在检查DateTime的格式的情况下,您应该使用DateTime.TryParse。在尝试了一些正则表达式后,他们似乎变得冗长而讨厌,希望能够涵盖大量的格式。
但TryParse需要一个“out”参数,因为我只想进行验证格式检查,我不需要实际的结果。
所以我留下了一个保存“out”结果的变量,我不做任何事情。有没有办法,所以我不必做一个out参数?
所以我摆脱了这个警告并且停止了变量飞行。
答案 0 :(得分:20)
不。我将它包装在一个方法中以保持噪音不受主流影响:
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()
}
答案 1 :(得分:8)
使用C#7.0(自2016年8月起),您可以使用out var构造,然后忽略后续代码中的新var。
bool success = DateTime.TryParse(value, out var result);
如果您真的不关心结果的价值,请使用discards:
bool success = DateTime.TryParse(value, out _);
答案 2 :(得分:7)
我并不是建议你实际上做这个,但你可以使用一个帮助程序类来简化所有输出参数:
public static class OutHelper<T>
{
[ThreadStatic]
public static T Ignored;
}
然后你可以打电话:
if (DateTime.TryParse(text, out OutHelper<DateTime>.Ignored))
这很可怕,使用公共可变字段,如果你的应用程序也在执行一些恶意代码,它会让代码访问你解析的最后一个值......但它应该有效:)
答案 3 :(得分:4)
没有。你不能摆脱变量,但你也不应该得到编译器警告。
将变量作为out
传递是“使用”变量。编译器不会因此发出警告。
答案 4 :(得分:4)
如果您使用的是.NET 3及更高版本,则始终可以创建Extension方法吗?
public static bool IsValidDate(this string value)
{
DateTime date = DateTime.Null;
return DateTime.TryParse(value, out date);
}
[已编辑将方法名称重命名为更合适的名称]
答案 5 :(得分:1)
TryParse
是更好的选择。它只是一个被浪费的变量。其他选项包括在try-catch块中使用Convert.ToDateTime()
。但是再次这不会有效,因为try-catch块意味着很重。下一个选项是正则表达式。这是一个更好的解决方案。我想这会比其他人立即给你结果。
你可以很好地包装像KimGräsman那样的方法......