首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

泛型的高级运用,求解

2013-07-11 
泛型的高级应用,求解 /// summary/// MongoDB添加数据/// /summary/// typeparam nameT类/typep

泛型的高级应用,求解


 /// <summary>
        /// MongoDB添加数据
        /// </summary>
        /// <typeparam name="T">类</typeparam>
        /// <param name="connstr">连接字符串如127.0.0.1</param>
        /// <param name="DatabaseName">数据库名</param>
        /// <param name="CollectionName">表名</param>
        /// <param name="t">添加的类</param>
        /// <returns>如果为空证明正确,不为空则为异常信息</returns>
        public static string WriteCollection<T>(String connstr, String DatabaseName, String CollectionName, T t)
        {
            String Message = string.Empty;
            try
            {
                using (Mongo_db = new MongoDBHelper(connstr, DatabaseName))
                {
                    if (t != null)
                    {
                        if (t.GetType().Name.IndexOf("List") >= 0)
                        {
                            //这里我自己写的判断传递进来的t是泛型集合的
                                 //问题就在于我如何把这T行转换有数据的List<T>型呢
                        }
                        else


                        {
                            
                            Mongo_db.Insert<T>(t, CollectionName);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Message = ex.Message;
            }
            return Message;
        }

调用方法如:   List<M_Personal> modelList = new List<M_Personal>();
            Message = WriteDB.WriteCollection<List<M_Personal>;("127.0.0.1", "table1", "table3", modelList);
请高手们解答下,告诉我如何判断和转换,谢谢大神们,貌似要用到反射,我试了一些没有弄成我想要的。。

泛型 反射
[解决办法]
引用:
Quote: 引用:


public static string WriteCollection<T>(String connstr, String databaseName, String collectionName, IList<T> t)
{
String Message = string.Empty;
try
{
using (Mongo_db = new MongoDBHelper(connstr, DatabaseName))


{
if (t != null)
{
Mongo_db.Insert<T>(t, CollectionName);
}
}
}
catch (Exception ex)
{
Message = ex.Message;
}
return Message;
}

// 调用
List<M_Personal> modelList = new List<M_Personal>();
Message = WriteDB.WriteCollection<M_Personal>;("127.0.0.1", "table1", "table3", modelList);



这样写不知道行不行?

这样写了的话,后台重载的方法不会区分是List<T>还是T,他都当T传了。。。


怎么会不行?(你的 Mongo_db.Insert<T> 方法可能也需要改一下)
下面的测试正确通过:


public static string WriteCollection<T>(String connstr, String databaseName, String collectionName, IList<T> t)
{
String message = string.Empty;
try
{
var list = new List<T>();
list.Insert(0, t[0]);
Console.WriteLine(list.Count); // 输出1

list.Clear();
list.AddRange(t);
Console.WriteLine(list.Count); // 输出3

//using (Mongo_db = new MongoDBHelper(connstr, DatabaseName))
//{
//if (t != null)
//{
//Mongo_db.Insert<T>(t, CollectionName);
//}
//}
}
catch (Exception ex)
{
message = ex.Message;
}
return message;
}

static void Main(string[] args)
{
var list = new List<string>();
list.Add("a");
list.Add("b");
list.Add("c");

WriteCollection(string.Empty, string.Empty, string.Empty, list);

Console.ReadLine();
}

热点排行