C# 什么集合允许我按对象上的参数进行搜索?

C# 什么集合允许我按对象上的参数进行搜索?,c#,C#,我有一个电话对象,如下所示: public string grade { get; set; } public string network { get; set; } public decimal price { get; set; } 我有一个循环,在这里我解析原始数据,在每次传递时我创建一个新的phone对象。我现在的任务是定义一个集合来保存这些电话对象 我不知道我需要什么样的收藏。我需要能够在我的代码中定义等级和网络,并轻松获取价格,这样就不可能有通用列表(我认为)。我应该使用多维数组

我有一个电话对象,如下所示:

public string grade { get; set; }
public string network { get; set; }
public decimal price { get; set; }
我有一个循环,在这里我解析原始数据,在每次传递时我创建一个新的phone对象。我现在的任务是定义一个集合来保存这些电话对象

我不知道我需要什么样的收藏。我需要能够在我的代码中定义
等级
网络
,并轻松获取价格,这样就不可能有通用列表(我认为)。我应该使用多维数组吗

每个等级和网络将只有一部手机(这是同一部手机的所有数据,只是不同的价格取决于网络或等级)


我可以使用什么最简单的集合来实现输入
等级
网络
并获取价格的目标?

您应该使用键入的列表。定义一个类:

public class Phone
{
   public string grade { get; set; }
   public string network { get; set; }
   public decimal price { get; set; }
}
然后定义一个列表:

var list = new List<Phone>();

您应该使用键入的列表。定义一个类:

public class Phone
{
   public string grade { get; set; }
   public string network { get; set; }
   public decimal price { get; set; }
}
然后定义一个列表:

var list = new List<Phone>();

您应该使用键入的列表。定义一个类:

public class Phone
{
   public string grade { get; set; }
   public string network { get; set; }
   public decimal price { get; set; }
}
然后定义一个列表:

var list = new List<Phone>();

您应该使用键入的列表。定义一个类:

public class Phone
{
   public string grade { get; set; }
   public string network { get; set; }
   public decimal price { get; set; }
}
然后定义一个列表:

var list = new List<Phone>();

如果使用LINQ进行查询,任何列表都可以

List<Phone> list = ...


string grade = "...";
string network = "...";

var phone = list.FirstOrDefault(
   p => 
       p.grade == grade && 
       p.network == network );

if ( phone != null )
{
  // found one
  var price = phone.price;
List=。。。
字符串级别=“…”;
字符串网络=“…”;
var phone=list.FirstOrDefault(
p=>
p、 等级==等级&&
p、 网络==网络);
如果(电话!=null)
{
//找到一个
var价格=电话价格;

如果使用LINQ进行查询,任何列表都可以

List<Phone> list = ...


string grade = "...";
string network = "...";

var phone = list.FirstOrDefault(
   p => 
       p.grade == grade && 
       p.network == network );

if ( phone != null )
{
  // found one
  var price = phone.price;
List=。。。
字符串级别=“…”;
字符串网络=“…”;
var phone=list.FirstOrDefault(
p=>
p、 等级==等级&&
p、 网络==网络);
如果(电话!=null)
{
//找到一个
var价格=电话价格;

如果使用LINQ进行查询,任何列表都可以

List<Phone> list = ...


string grade = "...";
string network = "...";

var phone = list.FirstOrDefault(
   p => 
       p.grade == grade && 
       p.network == network );

if ( phone != null )
{
  // found one
  var price = phone.price;
List=。。。
字符串级别=“…”;
字符串网络=“…”;
var phone=list.FirstOrDefault(
p=>
p、 等级==等级&&
p、 网络==网络);
如果(电话!=null)
{
//找到一个
var价格=电话价格;

如果使用LINQ进行查询,任何列表都可以

List<Phone> list = ...


string grade = "...";
string network = "...";

var phone = list.FirstOrDefault(
   p => 
       p.grade == grade && 
       p.network == network );

if ( phone != null )
{
  // found one
  var price = phone.price;
List=。。。
字符串级别=“…”;
字符串网络=“…”;
var phone=list.FirstOrDefault(
p=>
p、 等级==等级&&
p、 网络==网络);
如果(电话!=null)
{
//找到一个
var价格=电话价格;

我想你想得太多了。
列表应该可以

var phones = new List<Phone>();

如果有多个相同的
等级
网络
的组合,这将抛出一个错误。我认为您考虑得太多了。
列表
应该可以正常工作

var phones = new List<Phone>();

如果有多个相同的
等级
网络
的组合,这将抛出一个错误。我认为您考虑得太多了。
列表
应该可以正常工作

var phones = new List<Phone>();

如果有多个相同的
等级
网络
的组合,这将抛出一个错误。我认为您考虑得太多了。
列表
应该可以正常工作

var phones = new List<Phone>();


如果有多个相同的
grade
network

的组合,这将抛出一个错误。如果要将所有三个值一起存储在一个对象中,那么这无关紧要;只需使用
List
。如果将
grade
network
放入一个对象中,则使用
字典
ma这很有道理。我想你想得太多了,一个
列表似乎fine@BradleyDotNET不要忘记重写<代码>等号和<代码> GetHashCode <代码>。如果你想键入值语义,而不是引用一个。考虑对数据库进行一些研究。现在,对于允许基于某个“键”或“索引”查找值的数据结构的一般问题,最好的答案是使用数据库。@IlyaIvanov是的,这对于
字典
实现非常重要。如果要将所有三个值存储在一个对象中,则无所谓;只需使用
List.如果你把
等级
网络
放在一个对象中,那么
字典
就很有意义了。我认为你考虑得太多了,一个
列表
似乎fine@BradleyDotNET如果希望键具有值语义而不是引用语义,请不要忘记覆盖
Equals
GetHashCode
。考虑对数据库进行一些研究。当你的问题超出了你现在提出的简单情况时,你对数据结构的一般问题的最佳答案是允许使用一些“KEY”或“索引”来查找值。如果你把
grade
network
放在一个对象中,那么
字典
就很有意义了。我觉得你想得太多了,一个
列表似乎是fine@BradleyDotNET不要忘记覆盖
EqualS/<代码>和<代码> GetHashCode < /代码>如果你想键入值语义,而不是引用一个。考虑对数据库进行一些研究。当你的问题超出了你现在提出的简单情况时,对数据结构的一般问题的最佳答案是允许基于一些“密钥”或“索引”查找值。e一个数据库。@IlyaIvanov是的,这对于
字典
的实现是很重要的。如果你想把这三个值都存储在一个对象中,那没关系;只要使用
列表
。如果你把
等级
网络
放在一个对象中,那么
字典
就很有意义了。我认为是的你想得太多了,一个
列表似乎fine@BradleyDotNET如果希望键具有值语义,请不要忘记覆盖
Equals
GetHashCode