System.IndexOutOfRangeException: «не удается найти столбец 3» [dубликат]

Другим способом может быть создание правил для udev и вызов простого скрипта для изменения значения яркости: во-первых, создайте файл с именем auto-backlight.sh в своем домашнем каталоге (или любой другой из ваших предпочтений) с вашим любимым редактором, например gedit, и скопируйте и вставьте следующий код:

#!/bin/sh
# Adjust brightness of backlights based on power source
case $1 in
    # On battery
    true)
        # Dim screen backlight
        expr `cat /sys/class/backlight/intel_backlight/max_brightness` / 10 > \
            /sys/class/backlight/intel_backlight/brightness
    ;;

    # On AC
    false)
        # Dim screen backlight
        cat /sys/class/backlight/intel_backlight/max_brightness > \
            /sys/class/backlight/intel_backlight/brightness
    ;;
esac

return 0

Обратите внимание, что /sys/class/backlight/intel_backlight/ может быть чем-то другим в вашей системе, например /sys/class/backlight/acpi_video0/. Также обратите внимание, что, возможно, вам нужно изменить значение / 10 в зависимости от значения max_brightness, это может быть 100, 50, 5 и т. Д., Так как это фактор деления.

Дать исполнение разрешений для нового созданного скрипта: chmod 771 auto-backlight.sh

Затем создайте файл с именем 99auto-backlight.rules с вашим любимым редактором и поместите его в папку /etc/udev/rules.d/: sudo gedit /etc/udev/rules.d/99auto-backlight.rules (или свяжите его с помощью " ln "), содержащую следующие две строки:

SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script/auto-backlight.sh true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script/auto-backlight.sh false"

Заменить /path/to/your/script/ на фактический путь, где был установлен скрипт auto-backlight.sh.

Credit to Alex Лейтон за его идею здесь: https://unix.stackexchange.com/a/110469 и Pilot6 за его идею здесь: https://askubuntu.com/a/613816

132
задан 16 January 2017 в 10:47

2 ответа

Чтобы понять проблему, предположим, что мы написали этот код:

static void Main(string[] args)
{
    string[] test = new string[3];
    test[0]= "hello1";
    test[1]= "hello2";
    test[2]= "hello3";

    for (int i = 0; i <= 3; i++)
    {
        Console.WriteLine(test[i].ToString());
    }
}

Результат будет:

hello1
hello2
hello3

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.

Размер массива равен 3 (индексы 0, 1 и 2), но при попытке доступа за пределы с помощью (3) он выдает исключение.

3
ответ дан 15 August 2018 в 16:59

Простое объяснение того, что такое индекс из связанного исключения:

Просто подумайте, что в одном из поездов есть его отсеки: D1, D2, D3. Один пассажир пришел, чтобы войти в поезд, и у него есть билет на D4. теперь, что будет. пассажир хочет войти в отсек, который не существует, поэтому явно возникнет проблема.

Тот же сценарий: всякий раз, когда мы пытаемся получить доступ к списку массивов и т. д., мы можем получить доступ только к существующим индексам в массиве. array[0] и array[1]. Если мы попытаемся получить доступ к array[3], его там не будет, поэтому появится индекс из связанного исключения.

15
ответ дан 15 August 2018 в 16:59

Другие вопросы по тегам:

Похожие вопросы: