Вы говорите, что смотрите на строки, как насчет чего-то подобного, о котором кто-то уже прокомментировал.
var items = new List<string>();
items.Add("string1");
items.Add("string2");
if (items.Contains("string2"))
{
// do something
}
Вы даже можете получить значения из какого-либо файла конфигурации, чтобы заполнить список.
NSInteger
- это примитивный тип, что означает, что он может храниться локально в стеке . Вам не нужно использовать указатель для доступа к нему, но вы можете, если хотите. Строка:
NSInteger *processID = [[NSProcessInfo processInfo] processIdentifier];
возвращает фактическую переменную, а не ее адрес. Чтобы исправить это, вам нужно удалить *
:
NSInteger processID = [[NSProcessInfo processInfo] processIdentifier];
У вас может быть указатель на NSInteger
, если он вам действительно нужен:
NSInteger *pointerToProcessID = &processID;
Амперсанд - это адрес оператора . Он устанавливает указатель на NSInteger
равным адресу переменной в памяти, а не целому числу в переменной.
Причина, по которой вы не объявляете NSInteger
с *
потому, что это не объект. NSInteger - это просто int
или long
:
#if __LP64__
typedef long NSInteger;
#else
typedef int NSInteger;
endif
Если он используется в 32-битном приложении, это 32-битное целое число, и если оно создается в 64-битное приложение, это 64-битное целое число.
Конечно, вы можете передать NSInteger
в качестве указателя, но большинство функций просто принимают аргументы как NSInteger
, а не указатель на него.
Объекты, с другой стороны, могут передаваться другим функциям только как указатели. Это связано с тем, что для объектов динамически выделяется память, поэтому их нельзя объявлять в стеке. Поскольку для int
или long
выделен фиксированный объем памяти, это не проблема.
*
означает «указатель». Переменная объекта содержит указатель на объект, поэтому он имеет *
; переменная NSInteger содержит NSInteger, а не указатель на NSInteger, поэтому у нее нет *
. Добавление *
в эту переменную дает вам как минимум предупреждение, потому что вы помещаете целое число в переменную-указатель.
Несколько возможностей:
Ваше .NET-приложение может не указывать туда, куда вы или они думаете, что оно указывает. Например, он по ошибке указал на тестовый сервер
. Если в представлении есть индекс для плавающего или числового значения, значение может отличаться от базового запроса из-за округления
Параметр ANSI_NULLS специфичен для представления когда он был создан. Если он отличается от настройки во время выбора (ов) в базовых таблицах, это может вызвать расхождения для определенных типов запросов
. Базовые структуры таблиц изменились, а представление не обновилось (особенно проблема, если он использует " SELECT * ")
Я отредактирую этот пост, если вспомню о других.
РЕДАКТИРОВАТЬ: Вот пример того, как параметр ANSI_NULLS может отбросить ваши результаты:
SET ANSI_NULLS ON
DECLARE
@i INT,
@j INT
SET @i = NULL
SET @j = 1
SELECT
CASE WHEN @i <> @j THEN 'Not Equal' ELSE 'Equal' END
SET ANSI_NULLS OFF
SELECT
CASE WHEN @i <> @j THEN 'Not Equal' ELSE 'Equal' END
Вы должны получить следующие результаты: