Передайте структуру данных в функцию и получите доступ к полям структуры данных как массив в C # - PullRequest
0 голосов
/ 21 июля 2011

У меня есть набор полей разных типов, я должен сгруппировать их в любую структуру данных. Затем я должен передать его функции и изменить поля структуры данных с помощью индексов, таких как массив. Как бы я это сделал? Спасибо всем.

mytype{
   int a;
   ushort b;
   string c;
}

И я хотел бы передать эту структуру данных, которая группирует все эти поля, это может быть класс или структура. И передайте это функции и хотели бы изменить поля этого экземпляра с помощью индексов, например:

void function(ref mytype G)
{
    G[1] = 1;   <= Here G.a should be set to 1
}

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Вы можете использовать список объектов:

var list = new List<object>();
list.Add("strings are cool!");
list.Add(42);

// ...

var objByIndex = list[1];        // 42

Однако при этом вы потеряете все преимущества строгой типизации C #.Я бы предложил вместо этого использовать класс с четко определенными, строго типизированными свойствами, если только вам действительно не нужно что-то общее (где вы ничего не знаете о типах свойств заранее).

2 голосов
/ 21 июля 2011

Чтобы передать параметр методу по ссылке, вы можете использовать ключевое слово ref. Так что вы можете сделать что-то вроде этого:

void Method1(Class1 obj1, Class2 obj2, ref Class3 obj3)
{
   obj3 = new Class3();

   // set the fields of obj3 based on values of obj1 and obj2
}

Method1(obj1, obj2, ref obj3);

Что касается «изменения полей в структуре данных с помощью индексов, таких как массив», вы можете передать эти индексы в качестве дополнительных параметров, если это необходимо. Мне бы хотелось узнать немного больше о том, что вы делаете, чтобы ответить на этот вопрос.

Обратите внимание, что в приведенном выше примере единственная причина для передачи obj3 по ссылке - это то, что метод создает экземпляр объекта. Если объект уже создан, то передача по ссылке не требуется.

0 голосов
/ 21 июля 2011

Изменить объект довольно легко, если вы не передаете его через определенные границы (процесс, машина, сеть (вариант машины)).Вы можете передать ключевое слово ref, но в большинстве случаев это не обязательно.

Однако это действительно зависит от того, что вы подразумеваете под структурой данных.Вы говорите о реальных объектах, которые вы создали, или строках данных в наборе данных, о чем-то, что вы создали в EF?

Концепция та же самая.Если вы пересекаете границу, вам лучше «сбросить» свой объект, чем пытаться передать по ссылке.

Дайте некоторое руководство по вашему значению, и я могу получить более конкретную информацию.

...