在C#中删除参数?

时间:2009-09-12 06:29:57

标签: c# .net out-parameters

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

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

所以我留下了一个保存“out”结果的变量,我不做任何事情。有没有办法,所以我不必做一个out参数?

所以我摆脱了这个警告并且停止了变量飞行。

6 个答案:

答案 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那样的方法......