2015-05-18 2 views
-2

Я действительно пытаюсь проверить, равен ли string любому из ключей в моем объекте Dictionary.Сравните словарь Ключ типа string к другой строке в C#

Вот что я сделал до сих пор:

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 
     } 
    } 
} 
+4

Я не понимаю вопроса правильно; где находится словарь, который вы упоминаете в описании проблемы? Вы имеете в виду 'DataTable'? – Codor

+0

Извините, я забыл опубликовать его, я определил словарь в другом месте, я отредактирую его сейчас. –

+0

Попробуйте это 'if (typeNames.All (x => x == readColumn))' –

ответ

0

Я решил эту проблему (по вдохновению Пола Хулстона и Томаса Лиелахера)

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); 
    } 
4

Я не совсем уверен, что именно вы пытаетесь достичь. Если у вас есть диктатор C#, вы можете использовать linq для проверки значений, соответствующих требуемому значению, например.

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) 
        ); 
+0

У меня нет опыта работы с LINQ, потому что я бывший разработчик java и только начал работать с C#. Но спасибо, я попробую это –

+1

или просто: 'bool valueIsFound = dict.Values.Contains (valueToCompare, StringComparer.CurrentCultureIgnoreCase)' –

+0

Не должен ли он быть dict.Keys.Any (...), так как так спрашивает, строка, которая соответствует любому из ключей в их словарном объекте? –

0
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 
      } 
3

Поскольку вы хотите проверить, существует ли записи в словаре, что в том же ключе одного из значений в вашем columnNames объекте я предлагаю вам использовать ContainsKey методы

Смежные вопросы