首页 > 解决方案 > T 的 C# 铸造泛型

问题描述

我有以下方法:

 private void SaveCatalog<T>(T data)
        {
            // Open database (or create if doesn't exist)
            using (var db = new LiteDatabase(@"database.db"))
            {
                string tableName = null;

                switch (cboCatalogs.Text.ToLower())
                {
                    case "area":
                        tableName = "setup_area";

                        break;
                    case "department":
                        tableName = "setup_department";

                        break;
                }

                // error: data is a variable but is used as a type
                var col = db.GetCollection<data>(tableName);

                // error: data is a variable but is used as a type
                var records = data as BindingList<data>;

                col.Insert(records);

            }
        }

我在这里做错了什么。 T data可以是 Models.SetupArea 或 Models.SetupDepartment 类型,也可以是任何实际的东西。

在此处输入图像描述

有什么线索可以解决吗?

标签: c#generics

解决方案


做:

var col = db.GetCollection<T>(tableName);
var records = data as BindingList<T>;

您需要将类型放在那里,而不是变量。


推荐阅读