AddWithValue adds no value

When sending parameters from C# to SQL Server, instead of .AddWithValue():

string SomeString = "some string";
...
cmdObject.Parameters.AddWithValue("@StringParam", SomeString);

Most suggest .Add() instead (e.g. "Steve" in this Stack Overflow answer):

string SomeString = "some string";
...
cmdObject.Parameters.Add(new SqlParameter
{
    ParameterName = "@StringParam",
    Value         = SomeString,
    SqlDbType     = SqlDbType.VarChar,
    Size          = 255 // given the column is varchar(255) (-1 for max)
});

Why? It allows you to be more explicit about the type being passed in, as well as the length, and has other performance benefits as well.