Hi,
I’m wondering whats the correct and easiest way to pass a comparison function to a custom object to use for checking if two objects are the same.
To give more detail, i have a generic inventory class, and in it’s constructor I pass the comparer function that I wish to use later to determine if an two objects/items match.
Here’s my code,
public class CGInventory<T1>
{
public class CGInventoryItem
{
public int amount;
public T1 item;
public CGInventoryItem(int amount, T1 item)
{
this.amount = amount;
this.item = item;
}
}
public List<CGInventoryItem> items = new List<CGInventoryItem>();
private Comparison<T1> groupingComparer;
public CGInventory(Comparison<T1> groupingComparer)
{
this.groupingComparer = groupingComparer;
}
private CGInventoryItem Get(T1 searchItem)
{
foreach (CGInventoryItem item in items)
{
if (groupingComparer.Compare(searchItem, item.item) == 0)
{
return item;
}
}
return null;
}
And this is how I would like to use it:
public class SurvivalInventory : CGInventory<SurvivalItem>
{
public static int CompareItem(SurvivalItem x, SurvivalItem y)
{
return ((new CaseInsensitiveComparer()).Compare(y.itemName, x.itemName));
}
public SurvivalInventory(bool groupingEnabled, Comparer groupingComparer) : base(true, CompareItem)
{
}
}
It doesn’t know how to use
groupingComparer.Compare
everything else compiles
Thanks,
Primoz