空出在C#中的参数?(Null out parameters in C#?)

2019-07-17 19:39发布

阅读计算器后,在检查,你应该使用DateTime.TryParse日期时间的格式的情况下。 尝试一些正则表达式后,他们似乎得到长期和讨厌的覆盖地段格式​​。

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

所以我留下了持有的“出”的结果和我做与它无关的变量。 有没有一种方法,所以我没有做出来的参数?

所以我摆脱这个警告并停止具有可变只是飞来飞去。

Answer 1:

不。 我把它包装方法的地方,以保持噪声在主流的:

  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()
  }


Answer 2:

用C#7.0(自八月2016),你可以使用出VAR结构,然后就忽略后面的代码的新变种。

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

如果你真的不关心结果的值,使用丢弃 :

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


Answer 3:

我不建议你真正做到这一点,但你可以使用一个辅助类来简化这个对所有输出参数:

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

然后,您可以拨打:

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

这太可怕了,使用公共可变场,如果您的应用程序也与一些恶意代码执行时,它给出了代码访问你解析的最后一个值...但它应该工作:)



Answer 4:

不可以,你无法摆脱的变量,但你不应该得到一个编译器警告要么。

传递一个变量作为out为“使用”的变量中。 编译器不会发出正因为如此警告。



Answer 5:

如果您使用的是.NET 3及以上的,你总是可以创建一个扩展方法?

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

[编辑方法名重命名为一个更合适的酮]



Answer 6:

TryParse是一个更好的选择。 它只是被浪费的变量。 其他选项包括使用Convert.ToDateTime()一个try-catch块中。 但同样因为try-catch代码块意思是沉重的,不会是有效的。 下一个选项是正则表达式。 这是一个更好的解决方案。 我想这立刻给你的结果不是比别人。

可以很好的包裹像金Gräsman的方法说...



文章来源: Null out parameters in C#?