从泛型方法返回某种类型

时间:2014-10-20 03:52:25

标签: c# .net generics mono

我对泛型方法有疑问。

假设我正在创建一个带有自定义UI的游戏,它有ResourceManager个类。 有方法从ResourceManager获取对象并返回泛型类型,这里是类代码:

public class ResourceManager
{
        // The list that store the object
        private List<Control> _objects = new List<Control>();

        // Add object into the list
        public void Add(params Control[] objects)
        {
            _objects.AddRange(objects);
        }

        // Get the object from the list
        public T GetObject<T>(string name)
        {
            try
            {
                foreach (Control obj in _objects)
                {
                    if (obj.Name == name)
                        return (T)Convert.ChangeType(obj, typeof(T));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return default(T);
        }
}

如您所见,对象是Control类。 在我的项目中,很少有类继承这个类,让我们说它是ButtonImageCheckBox

我打电话时代码运行顺畅:

CheckBox checkBox = ResourceManager.GetObject<CheckBox>("CheckBox1");
Control control = ResourceManager.GetObject<Control>("Control1");

问题是,它接受任何类型,例如:

string str = ResourceManager.GetObject<string>("blablabla1");
int num = ResourceManager.GetObject<int>("blablabla2");

我只是希望代码在类型不是Control及其继承时不会编译。 谢谢!

1 个答案:

答案 0 :(得分:5)

添加约束public T GetObject<T>(string name) where T:Control