如何将字符串值分配给List <string> </string>

时间:2011-02-12 11:41:39

标签: c# generics

我的代码如下

string str=sbr.ToString();

这里我将从str

中获取SQLLITE中的所有表名
foreach (KeyValuePair<string, Dictionary<string, List<string>>> key in tableNames)
// Here i am geting only one n tablenames so i would like to assign str values to tableNames so that it will search for all if my != condition fails

{
    if (str.Contains(key.Key))
    {
        if (key.Key != "DBVERSION")
        {
            bool verify = false;
            if(DBUpdate(tableNames, key.Key)==false)
            {
                GetEndDate(tableNames, key.Key);
            }
            DBInsert(tableNames, key.Key);
        }
    }
}

我想将str值分配给tablename字段,我想与key值进行比较,任何人都可以帮助我吗?

        public bool Update(Dictionary<string, Dictionary<string, List<string>>> tableNames, SQLiteConnection m_oConn)
    {
        bool m_bFlag = false;           
        SQLiteDataAdapter adp=new SQLiteDataAdapter("select tbl_name from sqlite_master where type='table' order by tbl_name",m_oConn);

        DataSet ds=new DataSet();
        if (m_oConn.State == ConnectionState.Closed)
        {
            m_oConn.Open();
        }
        StringBuilder sbr=new StringBuilder();
        StringBuilder collumnNames = new StringBuilder();

        adp.Fill(ds);

        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
                sbr.Append(ds.Tables[0].Rows[i][0].ToString()+",");
        }
        string str=sbr.ToString();


            foreach (KeyValuePair<string, Dictionary<string, List<string>>> key in tableNames)
            {

                if (str.Contains(key.Key))
                {
                    if (key.Key != "DBVERSION")
                    {
                        bool verify = false;
                        if(DBUpdate(tableNames, key.Key)==false)
                        {
                            GetEndDate(tableNames, key.Key);
                        }
                        DBInsert(tableNames, key.Key);

                    }
                }
                else
                {
                    foreach (KeyValuePair<string, List<string>> ColNameKey in key.Value)
                    {
                        string strd = "";

                        List<string> values = ColNameKey.Value;
                        if(values[0].Contains("-"))
                        {
                            strd="DATE";
                        }
                        else if (values[0].Contains("'"))
                        {
                            strd = "CHAR";
                        }
                        else if (values[0].Contains("."))
                        {
                            strd = "FLOAT";
                        }
                        else
                        {
                            strd = "INT";
                        }

                        //GetDataTypes(ColNameKey.Key,out strd);
                        collumnNames.Append(ColNameKey.Key + " "+strd+",");

                    }
                    m_oCmd.CommandText = "create table " + key.Key + "(" + collumnNames.ToString().TrimEnd(',') + ")";
                    m_oCmd.ExecuteNonQuery();
                    sw.WriteLine(key.Key+" table created");
                    DBInsert(tableNames, key.Key);
                }


            }
            //m_oConn.Close();
         m_bFlag = true;
         return m_bFlag;
    }

3 个答案:

答案 0 :(得分:2)

如果我明白你的意思(我完全不确定)那么你需要这样的事情:

tablenames = new List<string>() { str };

或者这个(对于C#2.0)

tablenames = new List<string>(new string[] { str });

答案 1 :(得分:1)

在你想要达到目标的黑暗中拍摄,我认为你的tableNames实际上是Dictionary<string, Dictionary<string, List<string>>>,并且你想以某种方式添加str

为此你显然需要两个键。我会打电话给另一个key2。您可以通过说:

将字符串添加到列表中
tableNames[key][key2].Add(str);

但是,这假设密钥已经存在于字典中,并且列表已经实例化。如果你不能确定,你需要检查它:

if (!tableNames.ContainsKey(key))
    tableNames[key] = new Dictionary<string, List<string>>();
if (!tableNames[key].ContainsKey(key2))
    tableNames[key][key2] = new List<string>();
tableNames[key][key2].Add(str);

答案 2 :(得分:0)

非常神秘的问题......但我会按字面意思回答:)

  

我想将str值分配给tablename字段

您可以使用以下命令执行此操作:

tablename = str;

但是,对于此tablename,必须是string类型。如果tablenameList<string>,那么你的意思是模棱两可的;如果您的意思是想让tablename仅包含 str,那么它就是

tablename = new List<string> { str };

如果您的意思是 str添加到列表中,那么

tablename.Add(str);

但是,在后一种情况下,您需要确保首先实例化列表。您可以在该字段的原始声明中执行此操作,例如:

List<string> tablename = new List<string>();

我建议如果tablename确实是一个列表,您应该考虑将其称为 tablenames 而不是明确。

  

我希望与key值进行比较,任何人都可以帮助我吗?

有几种比较字符串的方法。要与另一个字符串x进行比较,最常见的字符串是:

key.CompareTo(x)          // ← only works if key is not null
string.Compare(key, x)

这些返回-101,具体取决于key是否按字典顺序缩小,相同或更大。

比较的相等性

key.Equals(x)             // ← only works if key is not null
string.Equals(key, x)
key == x

这些返回bool,即truefalse