在C#中取出参数?

在读取stackoverflow之后,在检查DateTime的格式的情况下,您应该使用DateTime.TryParse。 在尝试了一些正则表达式之后,他们似乎变得冗长而讨厌,希望覆盖大量的格式。

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

所以我留下了一个保持“结果”结果的变量,我不做任何事情。 有没有办法,所以我不必做一个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 { [ThreadStatic] public static T Ignored; } 

然后你可以打电话:

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

它太可怕了,使用了一个公共的可变字段,如果你的应用程序也在执行一些恶意代码,它会让代码访问你解析的最后一个值……但它应该可以工作:)

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

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

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

将变量作为out传递是“使用”变量。 编译器不会因此发出警告。

如果您使用的是.NET 3及更高版本,则始终可以创建Extension方法?

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

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

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

你可以很好地包装像KimGräsman这样的方法……