Is .NET have more specific type of exception for this case, or not?
No, the .Net framework does not have a more specific exception built in for your specific case.
And while you can always create your own custom exception class, I think that in most cases it's an overkill. I would say that an ArgumentException is the correct exception to throw in this situation.
And what is the better practice: tell into the exception message the reason of the exception or the way to correct it?
When throwing an exception you include in the message what's causing the exception, not how to fix it.
In this particular case, I would probably write something like this in the error message:
"<ArrayParameterName> have and invalid length. Acceptable length is <x>"
Of course, change <ArrayParameterName> to the name of the argument and <x> to the accepted length.