Mac OS X ABI требует выравнивания стека по 16 байт, прежде чем вызывать функцию.
Если ваш код работает, вам просто повезло, и это объясняет, почему вы получаете сегментацию e ошибка при изменении предыдущих разделов кода.
Поэтому вам необходимо убедиться, что стек выровнен по 16-байтовой границе. Я уже несколько раз ответил на аналогичный вопрос:
Как напечатать argv [0] в NASM?
Интересная часть:
; Align stack on a 16 bytes boundary
mov ebp, esp
and esp, 0xFFFFFFF0
Обязательно прочитайте полный ответ, хотя ...
Это!
public void Foo(Enum e)
{
var names = Enum.GetNames(e.GetType());
foreach (var name in names)
{
// do something!
}
}
РЕДАКТИРОВАНИЕ: Мое плохое, Вы сделали , говорят , выполняют итерации .
Примечание: Я знаю, что мог просто сделать GetNames () вызов в моем foreach операторе, но я предпочитаю присваивать тот тип вещи к вызову метода сначала, поскольку это удобно для отладки.
Используйте Перечисление. GetNames (typeof (e)) метод, это возвратит массив строк с именами.
можно также использовать Перечисление. GetValues для получения значений дубликата.
Редактирование - Возгласы - при передаче параметра как Перечисления необходимо будет использовать e. GetType () вместо typeof (), который Вы использовали бы при передаче параметра в как фактическое Перечислимое имя типа.
Перечисление. Перечисление GetValues. GetNames
так что-то как...
foreach(e1 value in Enum.GetValues(typeof(e1)))
Как это:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(typeof(e)))
{
Console.WriteLine(name);
}
}
правильно:
public void myFunc(Enum e)
{
foreach (var name in Enum.GetNames(e.GetTye()))
{
Console.WriteLine(name);
}
}