Пожалуйста, рассмотрите возможность использования плагина ACF.
И вы могли бы достичь этого, создав поле повторов и установив и обновив эти поля таким образом
$array_of_parts = get_fied('your-field-name', $post->ID);
Или
$array_of_parts[] = 'your-new-part';
update_field('your-field-name', $array_of_parts, $post->ID);
, тогда вы могли бы итерируйте эти части с помощью foreach и получайте количество частей, вызывая
count( $array_of_parts )
или используйте цикл
for($i=1;$i<=1000;$i++){
$file = get_post_meta($post->ID, $i, true);
if(!empty($file)){
echo $file;
}else{
break;
}
}
Прежде всего, замена без временной переменной в языке поскольку C # - очень плохая идея .
Но для ответа вы можете использовать этот код:
startAngle = startAngle + stopAngle;
stopAngle = startAngle - stopAngle;
startAngle = startAngle - stopAngle;
Однако могут возникнуть проблемы с округлением, если два числа существенно различаются. Это связано с природой чисел с плавающей точкой.
Если вы хотите скрыть временную переменную, вы можете использовать служебный метод:
public static class Foo {
public static void Swap<T> (ref T lhs, ref T rhs) {
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Правильный способ поменять местами две переменные:
decimal tempDecimal = startAngle;
startAngle = stopAngle;
stopAngle = tempDecimal;
Другими словами, используйте временную переменную.
Там у вас есть. Никаких хитрых трюков, никаких сопровождающих вашего кода, проклинающих вас на протяжении десятилетий, никаких записей в Daily WTF , и не тратите слишком много времени, пытаясь выяснить, зачем вам это нужно в одной операции, так как самый низкий уровень, даже самая сложная языковая функция - это серия простых операций.
Просто очень простой, читаемый, легкий для понимания, t = a; а = б; b = t;
решение.
По моему мнению, разработчики, которые пытаются использовать трюки, например, для «подмены переменных без использования temp» или «устройства Даффа», просто пытаются показать, насколько они умны ( и с треском провалился).
Я сравниваю их с теми, кто читает высокоуровневые книги исключительно для того, чтобы казаться более интересными на вечеринках (в отличие от расширения вашего горизонта).
Решения, в которых вы добавляете и вычитаете, или решения на основе XOR, меньше удобочитаемое и, скорее всего, медленнее, чем простое решение «временная переменная» (арифметические / логические операции вместо простых перемещений на уровне сборки).
Сделайте себе и другим услугу, написав читаемый код хорошего качества.
Это моя напыщенная речь. Спасибо за то, что выслушали: -)
Кстати, я прекрасно понимаю, что это не отвечает на ваш конкретный вопрос (и я извинюсь за это), но есть много прецедентов на SO, когда люди спрашивают, как сделать что-то и правильный ответ: «Не делай этого».
Решения, в которых вы добавляете и вычитаете, или решения на основе XOR, менее читабельны и, скорее всего, медленнее, чем простое решение «временная переменная» (арифметические / логические операции вместо простых перемещений на уровне сборки). [1248 Сделайте себе и другим услугу, написав качественный читаемый код.
Это моя напыщенная речь. Спасибо за то, что выслушали: -)
Кстати, я прекрасно понимаю, что это не отвечает на ваш конкретный вопрос (и я извинюсь за это), но есть много прецедентов на SO, когда люди спрашивают, как сделать что-то и правильный ответ: «Не делай этого».
Решения, в которых вы добавляете и вычитаете, или решения на основе XOR, менее читабельны и, скорее всего, медленнее, чем простое решение «временная переменная» (арифметические / логические операции вместо простых перемещений на уровне сборки). [1248 Сделайте себе и другим услугу, написав качественный читаемый код.
Это моя напыщенная речь. Спасибо за то, что выслушали: -)
Кстати, я прекрасно понимаю, что это не отвечает на ваш конкретный вопрос (и я извинюсь за это), но есть много прецедентов на SO, когда люди спрашивают, как сделать что-то и правильный ответ: «Не делай этого».
сервис, написав качественный читаемый код.Это моя напыщенная речь. Спасибо за то, что выслушали: -)
Кстати, я прекрасно понимаю, что это не отвечает на ваш конкретный вопрос (и я извинюсь за это), но есть много прецедентов на SO, когда люди спрашивают, как сделать что-то и правильный ответ: «Не делай этого».
сервис, написав качественный читаемый код.Это моя напыщенная речь. Спасибо за то, что выслушали: -)
Кстати, я прекрасно понимаю, что это не отвечает на ваш конкретный вопрос (и я извинюсь за это), но есть много прецедентов на SO, когда люди спрашивают, как сделать что-то и правильный ответ: «Не делай этого».
Не в C #. В нативном коде вы можете использовать трюк с тройной заменой XOR, но не на языке высокого уровня, обеспечивающем безопасность типов. (Во всяком случае, я слышал, что трюк XOR в действительности оказывается медленнее, чем использование временной переменной во многих распространенных архитектурах ЦП.)
Вам следует просто использовать временную переменную. Там нет причин, вы не можете использовать один; это не значит, что предложение ограничено.
Да, используйте этот код:
stopAngle = Convert.ToDecimal(159.9);
startAngle = Convert.ToDecimal(355.87);
Проблема сложнее для произвольных значений. : -)
int a = 4, b = 6;
a ^= b ^= a ^= b;
Работает для всех типов, включая строки и поплавки.
Для полноты, вот двоичный обмен XOR:
int x = 42;
int y = 51236;
x ^= y;
y ^= x;
x ^= y;
Это работает для всех атомарных объектов / ссылок, так как оно имеет дело непосредственно с байтами, но может потребовать небезопасного контекста для работать над десятичными знаками или, если вы чувствуете себя действительно извращенными, указатели. И это может быть медленнее, чем временная переменная, а также в некоторых обстоятельствах.
Для двоичных типов вы можете использовать этот прикол:
a %= b %= a %= b;
Пока a и b не являются одной и той же переменной (например, псевдонимами для одной и той же памяти), она работает.
<не рекомендуется>
Вы можете сделать это в 3 строки, используя базовую математику - в моем примере я использовал умножение, но также работало бы простое сложение.
float startAngle = 159.9F;
float stopAngle = 355.87F;
startAngle = startAngle * stopAngle;
stopAngle = startAngle / stopAngle;
startAngle = startAngle / stopAngle;
Редактировать: Как отмечено в комментарии, это не будет работать, если у = 0, поскольку это приведет к ошибке деления на ноль, которую я не рассматривал. Таким образом, альтернативное решение +/- было бы наилучшим способом.
deprecated>
Чтобы мой код был сразу понятным, я бы с большей вероятностью сделал что-то подобное. [Всегда думайте о бедняге, которому придется поддерживать ваш код]:
static bool Swap<T>(ref T x, ref T y)
{
try
{
T t = y;
y = x;
x = t;
return true;
}
catch
{
return false;
}
}
И тогда вы можете сделать это в одной строке кода:
float startAngle = 159.9F
float stopAngle = 355.87F
Swap<float>(ref startAngle, ref stopAngle);
Или ...
MyObject obj1 = new MyObject("object1");
MyObject obj2 = new MyObject("object2");
Swap<MyObject>(ref obj1, ref obj2);
Готово как ужин ... теперь вы можете передавать объекты любого типа и переключать их вокруг ...