I recently changed a function I was using inside a test, to take a params string[]
parameter instead of a plain string[]
.
The change of behaviour surprised me at first, although after tracing the exception I could see why it happened.
Here’s an example (inside a test class, using NUnit and FluentAssertions)
private static int HowManyStrings(params string[] y) { return y.Length; } [Test] public void TestHowManyStrings() { HowManyStrings("foo", "bar").Should().Be(2); HowManyStrings("foo").Should().Be(1); string myNullString = null; HowManyStrings(myNullString).Should().Be(1); HowManyStrings(default(string)).Should().Be(1); HowManyStrings(null).Should().Be(1); }
The last test causes an exception, because it’s OK to pass a string[]
as the parameter, and the null
(of unknown type) matches the string[]
better than making a string[] { null }
out of it.
It does feel like passing an untyped null to a params array parameter should produce a warning, either in the compiler or something like ReSharper – but neither flagged it up (C#5, ReSharper 7).