Your code is rather confused:
You don't actually remove anything from the list you pass in - because the Cast operation creates a copy of the original, not provides access to to the original under a different type.
Casting a list of objects doesn't use the contents of the objects and return the first string, it returns the object as a string - which means the object must implement an explicit casting operator.
Even if it did convert it to the "right string", it would be a list of strings, which wouldn't allow you to remove the item from the original collection!
Try this:
private bool RemoveItem(List<Male_zone> mens, Male_zone m)
{
Male_zone found = mens.FirstOrDefault(i => i.m_item == m.m_item);
if (found != null)
{
mens.Remove(found);
return true;
}
return false;
}
And please, use standard naming conventions - no underscores, CamelCase, no "m_" prefix on members,... Whatever you are using is outdated: it's very old C++ format which predates C#, and that has been available since 2002 ...