Ошибка int32 как исправить

У меня, когда программа скомпилирована (программа для консоли), выдает в консоли System.Int32[]. При любом коде выбивает это значение, на других компьютерах программа работает нормально.

В чем проблема?

Программирую на С#.

Обновление

static void Main(string[] args)
{

    string s = "Сегодня мы с вами рассмотрели, как работать со строками в Си-шарп. Были описаны основные операторы и методы, которые используются для работы со строками";

    string res = s.Substring(s.IndexOf("Были"), Convert.ToInt32( s.IndexOf(", которые") - s.IndexOf("Были")));
    Console.WriteLine(res);
    Console.ReadKey();
}

LEQADA's user avatar

LEQADA

5,1853 золотых знака23 серебряных знака48 бронзовых знаков

задан 14 ноя 2014 в 18:25

Renneur's user avatar

6

Честно говоря, не вижу проблем в вашем коде — у меня он также работает корректно. Если у вас действительно есть какие-то проблемы с кодом, то могу лишь предположить, что причиной тому могут быть локальные языковые настройки. Попробуйте заменить третью строку вашего кода на следующую:

string res = s.Substring(s.IndexOf("Были", StringComparison.Ordinal), Convert.ToInt32(s.IndexOf(", которые", StringComparison.Ordinal) - s.IndexOf("Были", StringComparison.Ordinal)));

ответ дан 14 ноя 2014 в 18:51

DreamChild's user avatar

DreamChildDreamChild

36k2 золотых знака44 серебряных знака85 бронзовых знаков

3

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 R2 как один файл для загрузки. Поскольку исправления являются кумулятивными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2.

Проблемы

Рассмотрим следующий сценарий.

  • У вас есть файл языка определения отчетов (RDL), содержащий элемент управления табликса в службах Microsoft SQL Server 2008 R2 Reporting Services.

  • Вы добавляете в элемент управления табликса группу строк или столбцов, а затем устанавливаете выражение группы для данных группы, используя столбец с числовым типом данных.

  • Этот столбец содержит значение, которое не входит в диапазон типа данных Int32 . Например, значение столбца — 9000001777400270.

В этом случае при попытке создать отчет появляется следующее сообщение об ошибке:

При локальной обработке отчета произошла ошибка. Произошла ошибка при обработке отчета. Значение было недопустимо малым или недопустимо большим для Int32.

Решение

Сведения о накопительном пакете обновления

SQL Server 2008 R2

Исправление для этой проблемы впервые выпущено в накопительном обновлении 4. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, щелкните следующий номер статьи базы знаний Майкрософт:

2345451 Накопительный пакет обновления 4 для SQL Server 2008 R2 Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2

Обходное решение

Для решения этой проблемы преобразуйте числовой тип данных в тип данных Double или Int64 . Для этого выполните следующие действия:

  1. Дважды щелкните группу в области группы строк или группы столбцов , чтобы открыть свойства группы .

  2. На вкладке Общие измените выражение Group на следующее выражение типа данных System. Double :

    CDbl (Fields!<имя поля>. ЗначениеВы также можете изменить выражение группы на следующий тип данных System. Int64 :

    CLng (Fields!<имя поля>. Значение

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Ссылки

Для получения дополнительных сведений о типах данных посетите следующие веб-сайты:

Общие сведения о структуре «Decimal»

Общие сведения о структуре «Int32»

Общие сведения о структуре «Int64»

Общие сведения о структуре «double»

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Fardar

0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

1

30.01.2019, 17:47. Показов 30937. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем привет.
Прошу помочь тех, кто уже встречался с такой проблемой и/или знает, что делать.
Проблема в том, что VS не подсвечивает ошибки, но в консоль выводится System.Int32[]
Пролез весь интернет. Подобные темы есть, но все же не то, поскольку там другая ситуация и проблема очевидна.
А тут я проблем не вижу.
Результатом должен быть массив.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Program
    {
        static void Main(string[] args)
        {
            int[] Revers(int[] numbers)
            {
                int[] rotate = new int[numbers.Length];
                for (int i = numbers.Length - 1; i >= 0; i--)
                {
                    int j = 0;
                    j++;
                    rotate[j] = numbers[i];
                }
                return rotate;
            }
            int[] array = new int[] { 6, 7, 4, 3, 8, 0 };
            int[] arr;
            arr = Revers(array);
            Console.WriteLine(array);
        }
    }



0



Someone007

Эксперт .NET

6318 / 3936 / 1578

Регистрация: 09.05.2015

Сообщений: 9,237

30.01.2019, 17:49

2

Лучший ответ Сообщение было отмечено Fardar как решение

Решение

Массив не так выводится.

Добавлено через 33 секунды

C#
1
Console.WriteLine(string.Join("," array));



2



0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

30.01.2019, 18:16

 [ТС]

3

Большое спасибо!
Если не сложно, мог бы ты мне подсказать, какая проблема в коде?
Писал функцию для вывода массива задом наперед, сейчас вот запустился благодаря тебе, но функция не отработала.



0



Someone007

Эксперт .NET

6318 / 3936 / 1578

Регистрация: 09.05.2015

Сообщений: 9,237

30.01.2019, 18:31

4

У вас выводится оригинальный массив.

C#
1
2
3
4
int[] array = new int[] { 6, 7, 4, 3, 8, 0 };
Console.WriteLine(string.Join("," array));
int[] arr = Revers(array);
Console.WriteLine(string.Join("," arr));



1



Fardar

0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

30.01.2019, 18:49

 [ТС]

5

Да, это я уже заменил. Там все равно неверно получается. Но я уже решил эту проблему. Поменял немного функцию таким образом: перенес j и инкремент в условие цикла

C#
1
2
3
4
5
6
7
8
9
10
11
int[] Revers(int[] numbers)
            {
                int[] rotate = new int[numbers.Length];
                for (int i = numbers.Length - 1, j = 0; i >= 0; i--, j++)
                {
                    
                    
                    rotate[j] = numbers[i];
                }
                return rotate;
            }



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.01.2019, 18:49

5

Fardar

0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

1

30.01.2019, 17:47. Показов 27637. Ответов 4

Метки нет (Все метки)


Всем привет.
Прошу помочь тех, кто уже встречался с такой проблемой и/или знает, что делать.
Проблема в том, что VS не подсвечивает ошибки, но в консоль выводится System.Int32[]
Пролез весь интернет. Подобные темы есть, но все же не то, поскольку там другая ситуация и проблема очевидна.
А тут я проблем не вижу.
Результатом должен быть массив.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Program
    {
        static void Main(string[] args)
        {
            int[] Revers(int[] numbers)
            {
                int[] rotate = new int[numbers.Length];
                for (int i = numbers.Length - 1; i >= 0; i--)
                {
                    int j = 0;
                    j++;
                    rotate[j] = numbers[i];
                }
                return rotate;
            }
            int[] array = new int[] { 6, 7, 4, 3, 8, 0 };
            int[] arr;
            arr = Revers(array);
            Console.WriteLine(array);
        }
    }

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Someone007

Эксперт .NET

6270 / 3898 / 1567

Регистрация: 09.05.2015

Сообщений: 9,189

30.01.2019, 17:49

2

Лучший ответ Сообщение было отмечено Fardar как решение

Решение

Массив не так выводится.

Добавлено через 33 секунды

C#
1
Console.WriteLine(string.Join("," array));

2

0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

30.01.2019, 18:16

 [ТС]

3

Большое спасибо!
Если не сложно, мог бы ты мне подсказать, какая проблема в коде?
Писал функцию для вывода массива задом наперед, сейчас вот запустился благодаря тебе, но функция не отработала.

0

Someone007

Эксперт .NET

6270 / 3898 / 1567

Регистрация: 09.05.2015

Сообщений: 9,189

30.01.2019, 18:31

4

У вас выводится оригинальный массив.

C#
1
2
3
4
int[] array = new int[] { 6, 7, 4, 3, 8, 0 };
Console.WriteLine(string.Join("," array));
int[] arr = Revers(array);
Console.WriteLine(string.Join("," arr));

1

Fardar

0 / 0 / 0

Регистрация: 10.01.2019

Сообщений: 28

30.01.2019, 18:49

 [ТС]

5

Да, это я уже заменил. Там все равно неверно получается. Но я уже решил эту проблему. Поменял немного функцию таким образом: перенес j и инкремент в условие цикла

C#
1
2
3
4
5
6
7
8
9
10
11
int[] Revers(int[] numbers)
            {
                int[] rotate = new int[numbers.Length];
                for (int i = numbers.Length - 1, j = 0; i >= 0; i--, j++)
                {
                    
                    
                    rotate[j] = numbers[i];
                }
                return rotate;
            }

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.01.2019, 18:49

5

I am trying to print out my array of numbers that I have assigned to a particular array. My algorithm for choosing numbers consists of choosing a random number that is not a duplicate and storing it inside the array.

Pretty simple really, but I have no idea as to why it is printing out this error.

int[] ticket1 = new int[4];
for (int i = 0; i < 4; i++)
{
    int temp = rand.Next(43);
    while (ticket1.Contains(temp)) 
    {
        temp = rand.Next(43);
    }
    ticket1[i] = temp;
}
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1.ToString());//ticket1 produces System.Int32[] instead of 4 numbers.
//I have changed this line to:
//Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
//And it still doesn't work. the error remains. (System.Int32[])

My question is, how can I print out my 4 numbers (beside each other) in string format.

//EDIT: I’ve found my problem. I am putting my ticket1 inside a foreach loop, it’s somehow not reaching out to the array values and it therefore prints out System.Int32[] instead.

All fixed.

asked Jun 13, 2015 at 12:06

bsd u's user avatar

bsd ubsd u

771 silver badge6 bronze badges

1

If you call ToString() on an array like that, you simply get the full name of the type of class.

You could fix it a few ways. Print only the current item inside the loop, or print each item one at a time outside of the loop:

Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...

Or «flatten» the collection before printing:

Console.WriteLine("My numbers: ", String.Join(", ", ticket1));

answered Jun 13, 2015 at 12:08

Grant Winney's user avatar

Grant WinneyGrant Winney

64.5k12 gold badges113 silver badges164 bronze badges

1

ticket1.ToString() does not print the content of the array, only its type, because this is the way the ToString() method is implemented on arrays.

You can fix this in several ways — for example, by using string.Join method:

Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));

answered Jun 13, 2015 at 12:08

Sergey Kalinichenko's user avatar

Because you are not writing your array elements, you are writing your array itself, that’s why ToString() generates it’s full type name.

Change your ticket1.ToString() to ticket1[i] in your for loop.

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
     Console.WriteLine("{0} {1}", item.PadRight(20), ticket1[i]);
}

If you don’t want to print it inside your for loop, then you can use String.Join to concatenate all your elements in your array in a simple string like;

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
}
Console.WriteLine("{0} {1}", item.PadRight(20), string.Join(",", ticket1));

answered Jun 13, 2015 at 12:08

Soner Gönül's user avatar

Soner GönülSoner Gönül

96k102 gold badges205 silver badges356 bronze badges

2

Because when you call .ToString() on an object you get the type of that object. For basic primitive (value) types this behavior is overridden to output the value. But for something like an array there’s no «default» string representation, so the behavior you’re seeing is the default.

You could wrap your data in an object and override .ToString() on that object. If you have to output the values in many places in the code that would be the way to go so you only have to write the logic once. («Smart data structures and dumb code works a lot better than the other way around.» — Eric Raymond)

But if you only need to do it here then you can just output the values directly. Basically join the values as a string in whatever representation you want. For example, if they should be comma-separated:

Console.WriteLine(
  "{0}{1}",
  item.PadRight(20),
  string.Join(",", ticket1));

answered Jun 13, 2015 at 12:11

David's user avatar

DavidDavid

201k35 gold badges195 silver badges271 bronze badges

I am trying to print out my array of numbers that I have assigned to a particular array. My algorithm for choosing numbers consists of choosing a random number that is not a duplicate and storing it inside the array.

Pretty simple really, but I have no idea as to why it is printing out this error.

int[] ticket1 = new int[4];
for (int i = 0; i < 4; i++)
{
    int temp = rand.Next(43);
    while (ticket1.Contains(temp)) 
    {
        temp = rand.Next(43);
    }
    ticket1[i] = temp;
}
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1.ToString());//ticket1 produces System.Int32[] instead of 4 numbers.
//I have changed this line to:
//Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
//And it still doesn't work. the error remains. (System.Int32[])

My question is, how can I print out my 4 numbers (beside each other) in string format.

//EDIT: I’ve found my problem. I am putting my ticket1 inside a foreach loop, it’s somehow not reaching out to the array values and it therefore prints out System.Int32[] instead.

All fixed.

asked Jun 13, 2015 at 12:06

bsd u's user avatar

bsd ubsd u

771 silver badge6 bronze badges

1

If you call ToString() on an array like that, you simply get the full name of the type of class.

You could fix it a few ways. Print only the current item inside the loop, or print each item one at a time outside of the loop:

Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...

Or «flatten» the collection before printing:

Console.WriteLine("My numbers: ", String.Join(", ", ticket1));

answered Jun 13, 2015 at 12:08

Grant Winney's user avatar

Grant WinneyGrant Winney

64.5k12 gold badges113 silver badges164 bronze badges

1

ticket1.ToString() does not print the content of the array, only its type, because this is the way the ToString() method is implemented on arrays.

You can fix this in several ways — for example, by using string.Join method:

Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));

answered Jun 13, 2015 at 12:08

Sergey Kalinichenko's user avatar

Because you are not writing your array elements, you are writing your array itself, that’s why ToString() generates it’s full type name.

Change your ticket1.ToString() to ticket1[i] in your for loop.

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
     Console.WriteLine("{0} {1}", item.PadRight(20), ticket1[i]);
}

If you don’t want to print it inside your for loop, then you can use String.Join to concatenate all your elements in your array in a simple string like;

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
}
Console.WriteLine("{0} {1}", item.PadRight(20), string.Join(",", ticket1));

answered Jun 13, 2015 at 12:08

Soner Gönül's user avatar

Soner GönülSoner Gönül

96k102 gold badges205 silver badges356 bronze badges

2

Because when you call .ToString() on an object you get the type of that object. For basic primitive (value) types this behavior is overridden to output the value. But for something like an array there’s no «default» string representation, so the behavior you’re seeing is the default.

You could wrap your data in an object and override .ToString() on that object. If you have to output the values in many places in the code that would be the way to go so you only have to write the logic once. («Smart data structures and dumb code works a lot better than the other way around.» — Eric Raymond)

But if you only need to do it here then you can just output the values directly. Basically join the values as a string in whatever representation you want. For example, if they should be comma-separated:

Console.WriteLine(
  "{0}{1}",
  item.PadRight(20),
  string.Join(",", ticket1));

answered Jun 13, 2015 at 12:11

David's user avatar

DavidDavid

201k35 gold badges195 silver badges271 bronze badges

  • Remove From My Forums
  • Question

  • Hi.

    Please someone help with this error:

    cannot perform ‘>=’ operation on system.int32 and system.string

    This is the error which always give me when executing this one when comparing prices between two values like, i > 5 && i < 10:

    dataGrid6.DefaultView.RowFilter = «Price >= » + textBox6.Text + «‘ And Price <= » + textBox7.Text + «‘»;

    The interesting thing is when i load excel file in datagridview and try executing this one works, but when i scrape data from website and than executing this one in the other gridview for new scraped data this error shows. please help. 

    just this query not work i’ve tried to executre other with LIKE works well.

    tnx

    • Edited by

      Sunday, May 18, 2014 4:12 AM
      Found solution for my prev question, but now i have new one

Answers

  • Unfortunately, that’s not going to work correctly for you in all circumstances. Since you’re now comparing strings instead of actual numeric data, you won’t get valid comparisons (for example, 10 will be less than 2, because as a string, «1» is less than
    «2» and «10» will also be less than «2»).

    You really need to have that DataColumn be a double in your DataTable. You didn’t answer my question as to how you’re getting the data into that DataTable.


    ~~Bonnie DeWitt [C# MVP]

    http://geek-goddess-bonnie.blogspot.com

    • Marked as answer by
      Caillen
      Sunday, May 25, 2014 12:25 AM

  • Hello,

    There is ‘things’ that happen under the covers when reading sheet data via OleDb that you are by default not in control of but there are literally countless ways to circumvent the default behavior from altering setting in the system registry to how you load
    data. No matter which method you use there are good and bad things to contend with.

    Let’s say a column has integers and doubles, when loading them into a DataTable via OleDb connection and command I would suspect if you interrogate the data type of each column with no formatting these numbers will show as Double. Now let’s say
    that if we want integer type and you are confident each value in the cells for that column in the range you are reading from may be represented as an integer and you know the column names we can generate Data Column for each column prior to
    reading the data.  

    In the example below the connection string has been setup so that the first row contains data thus each column name is Fx were x is the ordinal index of the column in the range read. Alias column Number3 is a Double but here we setup the DataColumn as integer
    (see comments in the example)

    DataTable dt = new DataTable { TableName = "ExcelData" };
    dt.Columns.Add(new DataColumn { ColumnName = "Identifier", 
                                    DataType = typeof(Int32), 
                                    AutoIncrement = true, 
                                    AutoIncrementSeed = 1 });
    dt.Columns.Add(new DataColumn { ColumnName = "ServerName", DataType = typeof(string) });
    dt.Columns.Add(new DataColumn { ColumnName = "FirstName", DataType = typeof(string) });
    dt.Columns.Add(new DataColumn { ColumnName = "Numbers1", DataType = typeof(double) });
    dt.Columns.Add(new DataColumn { ColumnName = "Numbers2", DataType = typeof(double) });
    /*
     * For the demo this column is determined to be Double when loading the data if we did
     * not define the columns above so in this case I know that the two columns above
     * and the one below are indeed Double I can indicate that Number3 column can be set
     * to Integer.
     */
    dt.Columns.Add(new DataColumn { ColumnName = "Numbers3", DataType = typeof(int) });
    
    using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection())
    {
        cn.ConnectionString = "Your connection string";
    
        using (OleDbCommand cmd = new OleDbCommand { Connection = cn })
        {
            cn.Open();
    
            cmd.CommandText = 
                @"
                SELECT 
                    F1 As ServerName, 
                    F2 As FirstName, 
                    F3 As Numbers1, 
                    F4 As Numbers2, 
                    F5 As Numbers3 
                FROM [Sheet1$] 
                Order By F2";
            dt.Load(cmd.ExecuteReader());
        }
    }
    

    Any ways it is important to know (as Bonnie has inquired) how your data was loaded.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help, this will help others who are looking for solutions to the same or similar problem.

    • Marked as answer by
      Caillen
      Sunday, May 25, 2014 12:26 AM

Понравилась статья? Поделить с друзьями:
  • Ошибка invalid floating point operation как исправить
  • Ошибка iostream no such file or directory
  • Ошибка int object is not callable питон
  • Ошибка invalid file version при запуске pvz
  • Ошибка iostream file not found