как преобразовать строковый массив в нулевой массив целых чисел.
Преобразовать строку [] в int? []
Ответ 1
Ну, два аспекта:
- Как вы преобразовываете массив из одного типа в другой?
- Как вы преобразовываете строку в nullable int?
Первое простое - вы можете использовать Array.ConvertAll, передавая делегат Converter. Также существует способ LINQ (x.Select(...).ToArray()), но это немного менее эффективно, если вы знаете, что у вас есть массив, и вы хотите, чтобы массив вышел из другого конца  1.
 string to int?, вероятно, лучше всего сделать в методе. Вы можете сделать это в анонимной функции, но в этом конкретном случае я бы использовал отдельный метод. Мне редко нравится объявлять переменные в анонимной функции.
public static int? TryParseInt32(string text)
{
    int value;
    return int.TryParse(text, out value) ? value : (int?) null;
}
Чтобы ответить на комментарий, да, вам нужно использовать листинг 2.
или без условного:
public static int? TryParseInt32(string text)
{
    int value;
    if (int.TryParse(text, out value))
    {
        return value;
    }
    else
    {
        return null;
    }
}
Соедините их следующим образом:
string[] x = {"15", "10", "hello", "5" };        
int?[] y = Array.ConvertAll(x, TryParseInt32);
  1Array.ConvertAll более эффективен, чем x.Select().ToArray(), потому что он имеет больше информации. Он может сразу создать конечный массив - не требуется изменение размера. Вызов Enumerable.ToArray() (с результатом Select()) не имеет одинаковой информации, поэтому он должен добавить результаты к List<T> (потенциально изменяя несколько раз по пути), а затем обычно изменять размер в конце также. (На самом деле он не использует List<T>, но понятия одинаковы.) Это определенно стоит знать о решении Select/ToArray, но я не думаю, что в этом случае он будет более читабельным, чем ConvertAll, поэтому вы может также использовать более эффективную форму.
  2 Причина, по которой вам нужен приведение в условном выражении, заключается в том, что компилятор не знает, какой тип "нуль" вы действительно имеете в виду, но он знает, что он не может преобразовать из null до int. Тип условного выражения должен быть либо типом второго операнда, либо типом третьего операнда, а другой должен быть неявно конвертируемым. Заставляя третий операнд иметь тип int? здесь все в порядке - потому что вы можете неявно конвертировать из int в int?. Обратите внимание, что компилятор не использует то, как вы используете выражение, чтобы попытаться определить тип. Другой альтернативой является использование new int?() вместо null.
Ответ 2
Разбираем и используем Linq:
string[] input = { "1", "3", "x" }
var result = input.Select(
    s => { int i; return (int.TryParse(s, out i)) ? i : (int?) null; }).ToArray();
... но я признаю, что это немного загадочно. Я бы не использовал здесь лямбда-выражение. Для ясности это должно принадлежать надлежащей функции ParseNullableInt. Затем вы можете вызвать его так:
var result = input.Select(ParseNullableInt).ToArray();
Ответ 3
Изменить: я удалил проверку null/empty, потому что TryParse корректно обрабатывает эти случаи, возвращая false.
string[] stringArray = ...;
int?[] nullableIntArray = Array.ConvertAll(stringArray,
    s =>
    {
        int value;
        if (!int.TryParse(s, out value))
            return default(int?);
        return (int?)value;
    });
Ответ 4
Один из вариантов был бы таким (я предполагаю, что вам нужны нули для значений, которые не являются целыми):
public static class StringArrayExtension
{
    public static int?[] ToNullableIntArray(this string[] array)
    {
        int?[] result = new int?[array.Length];
        for (int index = 0; index < array.Length; index++)
        {
            string sourceValue = array[index];
            int destinationValue;
            if (int.TryParse(sourceValue, out destinationValue))
            {
                result[index] = destinationValue;
            }
            else
            {
                result[index] = null;
            }
        }
        return result;
    }
}
использование:
string[] source = { "hello", "1", "3.1415", "20", "foo" };
int?[] dest = source.ToNullableIntArray();
Ответ 5
Вам нужно использовать int.TryParse:
    string[] s = { "123", "a", "45" };
    int?[] result = new int?[s.Length];
    for (int i = 0; i < s.Length; ++i)
    {
        int a;
        if (int.TryParse(s[i], out a))
            result[i] = a;
    }
Ответ 6
List<int?> ints = new List<int?>();
foreach (string str in strs)
{
    int val;
    if (int.TryParse(str, out val))
    {
        ints.Add(val);
    }
    else { ints.Add(null); }
}
return ints.ToArray();
Ответ 7
Integer массив не может быть нулевым. На самом деле каждый элемент массива Integer будет по умолчанию иметь "0".
Относительно преобразования
Создайте массив Integer той же длины или arraylist
int [] _arr=new int[strArray.length];
for(int i=0;i<strArray.length;i++]
{
   if(String.IsNullOrEmpty(strArray[i]))
   {
       _arr[i]=0;
   }
   else
   {
       _arr[i]=int.Parse(strArray[i]);
   }
}
