Q: is there any way to take an int turn it into a string and then into an int again i want to get the length of a number. i know i can do it with a while loop and dividing by 10 until the number reaches 0 but that takes around 10 line of code and i'm thinking it would be much quicker and much much more efficient to do it this way.
using System;

int[] array = new int[5]{1,12,123,1234,12345};
int[] length = new int[array.Length];
int i = 0;

while (i < 0)
{
    length[i] = int.Parse(((array[i]).ToString()).Length);
    i++;
}

i = 0;
while (i < array.Length)
{
    Console.Write("{0} ", length);
    i++;
}

for some reason when i tell it to print the code length of each number instead of printing the length(1 ,2 ,3 ,4 ,5) in just prints system.int32[] 5 times

A: You don't have to parse .Length since Length return int; your code amended:
  int[] array = new int[] {1, 12, 123, 1234, 12345};
  //TODO: you may want to put a better name here, say, digitCount
  // see comments below 
  int[] length = new int[array.Length];

  for (int i = 0; i < array.Length; ++i)
    length[i] = array[i].ToString().Length;

  for (int i = 0; i < length.Length; ++i)
    Console.Write("{0} ", length[i]);

You can query array with a help of Linq:
  using System.Linq;

  ... 

  int[] array = new int[] {1, 12, 123, 1234, 12345};

  int[] length = array
    .Select(item => item.ToString().Length)
    .ToArray();

And print length in one go with a help of Join:
  Console.Write(string.Join(" ", length));


A: This is because length is an array, and not the actual item (which I guess you want to print). The fix is easy, replace Console.Write("{0} ", length); with Console.Write("{0} ", length[i]);
Here a few tips for your code:
I see you are using while loops to iterate over something everywhere, so let me teach you a little about another type of loop, the for loop. The for is usually used to do something x amount of times and is constructed like so:
for (int i = 0; i < length.Length; i++)

This might seem complicated but it's actually quite simple, let me explain. We can break down the for loop into 3 sections. The iterator declaration, the iterating condition, and the increment. int i = 0 is the iterator declaration, here we declare and define a variable named i which is an int with the value 0. In the next block (i < length) we declare the condition, when this condition is true we keep on going, when it is false we stop looping. And lastly is the increment or step (i++), this gets executed after every loop and increments the iterator (i in this case) by 1. Rewriting your code with for loops results in this:
int[] array = new int[] {1, 12, 123, 1234, 12345};
int[] length = new int[array.Length];

for (int i = 0; i < array.Length; i++)
{
    length[i] = int.Parse(((array[i]).ToString()).Length);
}

for (int i = 0; i < length.Length; i++)
{
    Console.WriteLine("{0} ", length[i]);
}

This can still further be improved, for example, currently we are iterating twice over what is essentially the same data, which means we are wasting time. And also, since arrays are enumerable in C#, we can use a foreach loop. This is another type of loop which is almost the same as the for loop, but instead of doing something x amount of times we use to to something with every element of an enumerable. Using it we can do this:
int[] array = new int[] {1, 12, 123, 1234, 12345};

foreach (int element in array)
{
    Console.WriteLine($"{element.ToString().Length} ");
}

I also used something called string interpolation(the $ before the ")
