Member 13199106 Ответов: 2

Мне нужна помощь с const C#


Привет всем, кто действительно нуждается в помощи с этой ошибкой, которую я получаю.

До сих пор я никогда по-настоящему не использовал consts.

Поэтому мой план состоит в том, чтобы хранить все смещения внутри моего API, и все шло хорошо, пока не появился случай

случай 0x8ffddfsdf

Так вот моя кодировка номинальной статической виде uint


 public static uint HudEnt
        {
            get
            {
#if (DEBUG)
                return 0x913E0000;
#else
                return Program.API.Offsets.Addr_Main.HudEnt.Get();
#endif
            }
        }


а вот моя попытка с константой

   public const uint Test
            { 
            get
            {
#if (DEBUG)
               return 0x4156091D;
            #else
                return Program.API.Offsets.Addr_Main.Test.Get();
#endif
            }
}


Но с этим кодом я получаю ошибку "поле const требует значения"

Что я уже пробовал:

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

2 Ответов

Рейтинг:
1

phil.o

0x8ffddfsdf не является допустимым шестнадцатеричным представлением чисел.
Шестнадцатеричные числа могут быть указаны только с цифрами от 0 до 9 и буквами от a до f (без учета регистра).
Более того, в C# вы не можете использовать const ключевое слово со свойством или методом, как это можно сделать в C(++). const ключевое слово зарезервировано для переменных полей внутри класса.
Так что вам придется заменить const спецификатор с помощью static описатель:

public static uint Test {
   // ...
}

Надеюсь, это поможет. Любезно.


Member 13199106

Извините, что я должен был это сказать, но 0x8ffddfsdf-это всего лишь пример, и вы не можете просто использовать uint с case, он должен быть const. Но спасибо за помощь, чувак.

phil.o

Ты имеешь в виду case как и в контексте а switch заявление? Тогда вы должны показать свою попытку switch использование операторов.

Рейтинг:
0

OriginalGriff

Посмотрите на сообщение об ошибке:

A const field requires a value
Вы не можете определить const свойство, потому что свойство - это не поле, а синтаксический сахар для пары методов getter и setter:
public uint Test
    {
    get { return 123; }
    }
Реализуется как:
public uint getTest()
    {
    return 123;
    }
И Ваше встроенное использование также переводится в вызовы методов.
А поскольку методы в C# не должны возвращать одно и то же значение каждый раз, у вас не может быть свойства const, а только поле const.
И даже тогда значение a const поле должно быть известно во время компиляции, а не во время выполнения.
Так что ты тоже не можешь этого сделать:
public const uint Test = Program.API.Offsets.Addr_Main.Test.Get();
По той же причине: вызов метода не должен возвращать одно и то же значение каждый раз, поэтому выражение не известно во время компиляции.

То, что вы можете сделать, это использовать static readonly:
public static readonly uint Test = Program.API.Offsets.Addr_Main.Test.Get();
Который генерирует значение, которое может быть установлено во время выполнения - один раз и только один раз, если оно не находится внутри конструктора.