C#: Declaring and using a list of generic classes with different types, how?

后端 未结 9 1508
猫巷女王i
猫巷女王i 2020-12-23 21:19

Having the following generic class that would contain either string, int, float, long as the type:

public class MyData         


        
9条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-23 21:43

    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);
        }
    }
    

提交回复
热议问题