Having the following generic class that would contain either string, int, float, long as the type:
public class MyData
Delegates can really help simplify this, and still keep things type-safe:
public void TestMethod1()
{
Action intInvoke = (o, data) => o.SomeMethod(data);
Action stringInvoke = (o, data) => o.SomeMethod(data);
var list = new List
{
new MyData { Data = 10, OnTypedInvoke = intInvoke },
new MyData { Data = "abc", OnTypedInvoke = stringInvoke }
};
var someClass = new SomeClass();
foreach (var item in list)
{
item.OnInvoke(someClass);
}
}
public abstract class MyData
{
public Action OnInvoke;
}
public class MyData : MyData
{
public T Data { get; set; }
public Action OnTypedInvoke
{ set { OnInvoke = (o) => { value(o, Data); }; } }
}
public class SomeClass
{
public void SomeMethod(string data)
{
Console.WriteLine("string: {0}", data);
}
public void SomeMethod(int data)
{
Console.WriteLine("int: {0}", data);
}
}