C# 是不是有一种存储多个对象并且仍然易于访问的好方法 [关闭]

Posted

技术标签:

【中文标题】C# 是不是有一种存储多个对象并且仍然易于访问的好方法 [关闭]【英文标题】:C# Is there a good way to store multiple objects and still be easy to access [closed]C# 是否有一种存储多个对象并且仍然易于访问的好方法 [关闭] 【发布时间】:2021-04-01 15:20:19 【问题描述】:

也许很难理解,但我想知道是否有一种方法可以存储多个变量,例如 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"); 来获取它的ID(名称和ID 是唯一的)。所以以后,当我得到项目的 ID 或名称时,我可以请求一切。

类似这样的:

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 对象之间!? 是的,我认为元组是我要找的。有没有办法重命名项目,所以它不是 Item1,Item2,Item3 ..... Item 应该是您的项目列表的辅助类吗?目前尚不清楚Item 是什么,根据我认为它是列表中的特定项目的名称。不是列表本身... Sry Item 只是我为命令选择的一个名称,例如我希望它看起来像什么 【参考方案1】:

您可以创建一个自定义列表:

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");

【讨论】:

【参考方案2】:

不确定我是否完全理解你的问题,但在这里试一试

有很多方法可以给这只猫剥皮,这里有一些想法:

您可以编写类、结构体、元组来对 Item 类型进行建模 您可以拥有一个使用 ID 作为键的字典,并将项目对象存储为值。这将允许通过 ID 轻松快速地查找,而不是按名称搜索或 将项目列表存储在标准集合中,如 List 并使用 linq 查询过滤和查找项目或 编写您自己的 Collection 类,该类可能派生自 List,然后您可以编写自定义方法,例如 ID()、Name() 或 像这样在您使用的集合类型上编写扩展方法 ID()、Name() 等
public static Item ID(this IList<Item> items, string name) 
   
  return items.SingleOrDefault(e=>e.Name == name); 

【讨论】:

以上是关于C# 是不是有一种存储多个对象并且仍然易于访问的好方法 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 解析ini类型文件详解

C# 应用程序中的多个 VB6 公寓

如何等待多个 C# 事件?

Dapper-小型ORM之王(C#.NET)

C#超级有用的一种类型—匿名类型

C#如何封装字段