Two things.
First, you probably want to store the days in the current month in a
variable. I don't know whether the compiler is smart enough to extract
that operation from the loop and not calculate it every time. So, you
could say:
int daysThisMonth = DateTime.DaysInMonth(DateTime.Today.Year,
DateTime.Today.Month);
Second, you declared
string[] day;
but you didn't actually make an array of strings. Let me explain: the
line above creates a variable called "day" that sometime later may
refer to an array of strings. However, it doesn't actually contain
anything yet: it just contains a null reference. You have to make an
array of strings and then have "day" refer to that array. Usually that
is done like this:
string[] day = new string[daysThisMonth];
Now "day" will contain a reference to an array of (maybe 31) strings.
There's nothing in each element of the array yet, though: all of the
entries contain null references.
Inside your loop, you said:
day = i;
what this sort-of says is that you want to throw away your reference to
the 31 string array and instead point "day" to an integer held in "i".
Since integers and arrays aren't interchangeable, the compiler will
complain about this.
You want something more like this:
day[i - 1] = i;
which says that you want to set the "i - 1"th element in the array to
the integer i. Now, this still won't work, because integers and strings
aren't interchangeable in C#, but at least you're setting an element in
the array and not trying to clobber the entire array. Finally, to make
it compile, you need to replace the above line with this:
day[i - 1] = i.ToString();
which says that you want to convert the integer value in "i" into a
string, and then put a reference to that string in the "i - 1"th entry
in the array.
(Note that it's i -1 because in C# arrays start at index 0, not at
index 1 as they normally do in Visual Basic.)