【发布时间】:2021-07-11 14:38:38
【问题描述】:
在我的 Visual Studio2019 C# 控制台程序(名为“codeTester”)中,我有这个对象:
public class ipData
{
private string ip;
private string region;
private string country;
public ipData(string ip, string region, string country)
{
this.ip = ip;
this.region = region;
this.country = country;
}
public string Ip
{
get { return ip; }
set { ip = value; }
}
public string Region
{
get { return region; }
set { region = value; }
}
public string Country
{
get { return country; }
set { country = value; }
}
}
我创建了这个对象的列表并添加了一些数据:
List<ipData> ipInfo = new List<ipData>();
ipInfo.Add(new ipData("192.168.0.199", "UT", "USA"));
ipInfo.Add(new ipData("251.168.0.963", "NB", "CAN"));
现在我想在其中一个字段上搜索列表,所以我要求用户提供要搜索的数据:
Console.WriteLine("Enter searh criteria: ");
string searchparam = Console.ReadLine();
接下来我想要找到的项目的索引,如果有的话:
int x = ipInfo.IndexOf(searchparam);
但是这个语句会抛出一个设计时异常:
"参数 1:无法从 'string' 转换为 'codeTester.Program.ipData'"
所以我在这一点上被困了好几个小时,我的所有搜索都没有产生任何相关的信息。我哪里错了?
【问题讨论】:
-
您要准确搜索什么? IP、地区还是国家?
ipInfo是List<ipData>,因此您应该将现有的ipData实例传递给它以尝试在列表中找到它。看来您实际上是在尝试按字符串值进行搜索,因此List<T>的FindIndex方法可能更符合您想要做的事情。即便如此,您仍然必须决定您实际尝试搜索的内容以及该搜索应如何在每个元素级别上进行。 -
尝试在 Linq 的帮助下查询:
var index = ipInfo.Select((item, index) => new {item, index}).FirstOrDefault(r => r.item?.Ip == searchParam)?.index ?? -1;。这里我假设searchParam应该与Ip属性进行比较 -
我认为这无关紧要,但我正在寻找“地区”。用户输入类似于“UT”,搜索会找到所有带有区域 ==“UT”的元素。很可能将
searchparam与三个字段中的任何一个进行比较。但对于这种情况,它是“区域”。