我正在尝试比较用户输入的字符串是否存在于列表中,如果确实存在,我想将其从列表中删除。
我收到一个错误:
参数1:无法从“ project.MainClass.Artical”转换为“ string”
我知道我得到它是因为我正在尝试将字符串与列表进行比较。
我有结构:
struct Artical {
public string name;
public float price;
public double weight;
}
和方法:
static void DeleteArtical()
{
Artical k = new Artical();
Console.WriteLine("Enter name you want to delete: ");
k.name = Console.ReadLine();
List < Artical > articals = new List < Artical > ();
using(StreamWriter sw = File.AppendText((@ "../../dat.txt"))) {
if (articals.Exists(x => string.Equals(x, k.name, StringComparison.OrdinalIgnoreCase))) {
Console.WriteLine("Done !!");
artikli.Remove(k);
}
}
}
带下划线的x给了我上面提到的错误。
该错误来自您试图将类型为的对象Artical
与进行比较的观点string
。x
lambda表达式中的in表示中的一个元素,List<Artical>
因此您需要name
使用它来访问属性,因为这是您要比较的:
if (articals.Exists(x => string.Equals(x.name, k.name, StringComparison.OrdinalIgnoreCase)))
请注意,删除:
从列表中删除第一次出现的特定对象
此外,您需要确保compare对象中的所有其他值(price
和weight
)必须与您要查找的值匹配,否则该项目将不会被删除!
编辑:
您可以做的是使用FirstOrDefault实际拉出您要查找的结构。
此方法:
返回满足条件的序列的第一个元素,如果找不到此类元素,则返回默认值。
默认值是一个空结构,每个属性都有默认值。知道了这一点,您便可以通过检查是否name
有价值来检查您的查找过程是否成功。如果您已经成功找到该项目,则可以使用相同的对象将其从列表中删除:
Artical objectForRemoval = articals.FirstOrDefault(x => string.Equals(x.name, k.name, StringComparison.OrdinalIgnoreCase));
if (!String.IsNullOrWhiteSpace(objectForRemoval.name))
{
Console.WriteLine("Done !!");
articals.Remove(objectForRemoval);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句