简体   繁体   中英

Compare Dictionary Key of type string to another string in C#

I'm actually trying to check if a string is equal to any of the key's in my Dictionary object.

Here is what I have done so far:

using (var oStreamReader = new StreamReader(path))
{
    Dictionary<String, String> typeNames = new Dictionary<string, string>();
    typeNames.Add("Kind","nvarchar(1000)");
    typeNames.Add("Name","nvarchar(1000)");
    DataTable oDataTable = new DataTable();

    var headLine = oStreamReader.ReadLine().Trim().Replace("\"", ""); 
    var columnNames = headLine.Split(new[] { ';' });

    String[] oStreamDataValues;

    /*
    *create DataTable header with specific datatypes and names
    */

    int countCol = 0;

    foreach (string readColumn in columnNames)
    {


        if ((readColumn.ToString().Replace("\"", "").CompareTo(typeNames) == true))
        {
            // this comparison doesn't work
        }
    }
}

I am not quite sure what exactly you are trying to achieve. If you have a C# dictonary you can use linq to check for values that match the required value, eg

string valueToCompare = "Value to match";
Dictionary<string, string> dict = new Dictionary<string, string> 
                                  {
                                    {"Key 1", "A value"}, 
                                    {"Key 2", "Another value"}
                                  };
bool found= dict.Values
                .Any(value 
                     => 
                     value.Equals(valueToCompare,
                                  StringComparison.CurrentCultureIgnoreCase)
                    );

由于您想检查字典中是否存在与columnNames对象中某个值的键相同的条目,因此我建议您使用ContainsKey方法

Dictionary<string, string> d = new Dictionary<string, string>();
            string keyvalue;
            if (d.ContainsKey("value to find"))
            {
                if (d.TryGetValue("value to find", out keyvalue))
                {
                    //// here keyvalue variable has the value 
                }
                else
                {
                    ///value is null or throws exception
                }
            }
            else
            {
                    ////key no exists
            }

I have solved this (by inspiration of Paul Houlston and Thomas Lielacher)

String headLine = oStreamReader.ReadLine().Trim().Replace("\"", ""); 
String columnNames = headLine.Split(new[] { ';' });



foreach (string readColumn in columnNames)  {

if (typeNames.Keys.Contains(readColumn, StringComparer.CurrentCultureIgnoreCase)==true)
    {
      DataColumn oDataColumn = new DataColumn(readColumn,typeof(System.String));
      oDataTable.Columns.Add(oDataColumn);
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM