Массивное значение ключа в ASP.NET с С#
Я новичок в ASP.NET с С# Теперь мне нужно решение для одной проблемы
в PHP я могу создать массив вроде этого
$arr[] = array('product_id' => 12, 'process_id' => 23, 'note' => 'This is Note');
//Example
Array
(
[0] => Array
(
[product_id] => 12
[process_id] => 23
[note] => This is Note
)
[1] => Array
(
[product_id] => 5
[process_id] => 19
[note] => Hello
)
[2] => Array
(
[product_id] => 8
[process_id] => 17
[note] => How to Solve this Issue
)
)
Я хочу создать такую же структуру массива в ASP.NET с С#.
Пожалуйста, помогите мне решить эту проблему. Спасибо в Advance.
Ответы
Ответ 1
Используйте Dictionary<TKey, TValue>
для быстрого поиска значения (вашего объекта) на основе ключа (вашей строки).
var dictionary = new Dictionary<string, object>();
dictionary.Add("product_id", 12);
// etc.
object productId = dictionary["product_id"];
Чтобы упростить операцию Add
, вы можете использовать синтаксис инициализации коллекции, например
var dictionary = new Dictionary<string, int> { { "product_id", 12 }, { "process_id", 23 }, /* etc */ };
Edit
С вашим обновлением я хотел бы продолжить и определить правильный тип для инкапсуляции данных
class Foo
{
public int ProductId { get; set; }
public int ProcessId { get; set; }
public string Note { get; set; }
}
И затем создайте массив или список этого типа.
var list = new List<Foo>
{
new Foo { ProductId = 1, ProcessId = 2, Note = "Hello" },
new Foo { ProductId = 3, ProcessId = 4, Note = "World" },
/* etc */
};
И тогда у вас есть список сильно типизированных объектов, которые вы можете перебрать, привязать к элементам управления и т.д.
var firstFoo = list[0];
someLabel.Text = firstFoo.ProductId.ToString();
anotherLabel.Text = firstFoo.Note;
Ответ 2
Если вы ищете сопоставление от string
до object
:
Dictionary<string, object> map = new Dictionary<string, object> {
{ "product_id", 12 },
{ "process_id", 23 },
{ "note", "This is Note" }
};
В качестве альтернативы, возможно, вам нужен анонимный класс, если это всего лишь способ передачи данных:
var values = new {
ProductId = 12,
ProcessId = 23,
Note = "This is Note"
};
Это действительно зависит от того, чего вы пытаетесь достичь - большего изображения.
EDIT: если у вас есть одни и те же "ключи" для нескольких значений, я бы, вероятно, создал для этого определенный тип - неясно, какой тип сущности это предназначен для представления, но вы должны создать класс для модели его и при необходимости добавить к нему соответствующее поведение.
Ответ 3
Ассоциативный массив может быть представлен в С# с использованием словаря.
Его Enumerator.Current вернет keyValuePair.
Итак, ваш массив хотел бы
var associativeArray = new Dictionary<string, string>(){ {"product_id", "12"}, {"process_id"," 23", {"note","This is Note"}};
Ответ 4
Попробуйте это
System.Collections.Generic.Dictionary<string, object>[] map = new System.Collections.Generic.Dictionary<string, object>[10];
map[0] = new System.Collections.Generic.Dictionary<string,object>();
map[0].Add("product_id", 12);
map[0].Add("process_id", 23);
map[0].Add("note", "This is Note");
map[1] = new System.Collections.Generic.Dictionary<string,object>();
map[1].Add("product_id", 5);
map[1].Add("process_id", 19);
map[1].Add("note", "Hello");