С# Есть ли хороший способ хранить несколько объектов и при этом быть легко доступным?

Может быть, это трудно понять, но я хочу знать, есть ли способ хранить несколько переменных, таких как 2d-массив, но использовать команды для легкого доступа к ним?

Пример:

ItemID = "1";ItemName = "Apple";ItemPrice = 10; ItemLocation = "Storage";
ItemID = "2";ItemName = "Bread";ItemPrice = 20; ItemLocation = "Outside";
ItemID = "3";ItemName = "TV";ItemPrice = 30; ItemLocation = "House";

Таким образом, я могу получить к нему доступ с помощью такой команды, как Item.Name(1);, чтобы получить его имя и Item.ID("Apple");, чтобы получить его идентификатор (имена и идентификаторы уникальны). Поэтому позже я могу запросить все, когда получу идентификатор или имя элемента.

Что-то вроде этого:

int IID = Item.ID("Bread");
string IName = Item.Name(2);
int IPrice = Item.Price(IID);
string ILocation = Item.Location(IID);
//So .ID return the ID but requires string Name
//And everything else requires the ID

заранее спасибо

-Кофе

Извините за мою плохую грамматику, которую я все еще учу :x

Насколько я понимаю, вы находитесь между объектом Datarow или Tuple!?

ademg 23.12.2020 00:04

Да, я думаю, что кортеж - это то, что я искал. Есть ли способ переименовать элементы, чтобы это были не Item1, Item2, Item3.....

Coffee 23.12.2020 00:16

Должен ли Item быть вспомогательным классом для вашего списка элементов? Непонятно, что такое Item, судя по названию, я бы предположил, что это конкретный элемент в списке. Не сам Список...

Adam Plocher 23.12.2020 00:17

Sry Item был просто именем, которое я выбрал для команды, например, как я хочу, чтобы она выглядела.

Coffee 23.12.2020 00:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
871
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете создать собственный список:

using System.Collections.Generic;
using System.Linq;

...

public class Item
{
    public int ItemId { get; set; }
    public string ItemName { get; set; }
    public string ItemLocation { get; set; }
}

public class ItemList : List<Item>
{
    public Item GetByName(string name)
    {
        return this.FirstOrDefault(x => x.ItemName == name);
    }

    public Item GetById(int id)
    {
        return this.FirstOrDefault(x => x.ItemId== id);        
    }
}

Затем вы можете использовать его следующим образом:

var itemList = new ItemList();
itemList.Add(new Item { ItemId = 1, ItemName = "Some Item", ItemLocation = "Wherever" });
itemList.Add(new Item { ItemId = 2, ItemName = "Some Other Item", ItemLocation = "" });

var item = itemList.GetByName("Some Item");

Не уверен, что полностью понял ваш вопрос, но здесь

Есть много способов снять шкуру с этих кошек, и вот некоторые мысли:

  • Вы можете написать класс, структуру, кортеж для моделирования типа элемента.
  • У вас может быть словарь, использующий идентификатор в качестве ключа и сохраняющий объект элемента в качестве значения. Это позволит легко и быстро искать по идентификатору, но меньше искать по имени ИЛИ
  • Сохраните список элементов в стандартной коллекции, такой как список, и используйте запрос linq для фильтрации и поиска элемента ИЛИ
  • Напишите свой собственный класс Collection, который, возможно, является производным от List, а затем вы можете написать собственные методы, такие как ID(), Name() ИЛИ
  • Напишите методы расширения ID(), Name() и т. д. для типов коллекций, которые вы используете следующим образом.
public static Item ID(this IList<Item> items, string name) 
{   
  return items.SingleOrDefault(e=>e.Name == name); 
}

Другие вопросы по теме