2016-11-03 3 views
0

Problème: Une liste T d'objet (aTSource) contient une liste de noms de champs avec des espaces et des traits de soulignement supplémentaires qui empêchent les correspondances avec une variable sans.Suppression d'espaces et de traits de soulignement d'une liste T

J'ai une liste T d'objet de ma classe Model. Cette liste comprend un nom de champ, une valeur et le type de champ. Je veux aller dans les noms de champs et supprimer tous les espaces et les traits de soulignement du nom.

Le but du code est de comparer les champs d'un document Excel et d'un formulaire WPF et de renvoyer une liste de ces noms de champs en commun.

foreach (DataRow dataRow in dataTable.AsEnumerable().ToList()) 
{ 
    T aTSource = new T(); 
    foreach (PropInfo aField in commonFields) 
    { 
     PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name); 
     var value = (dataRow[afield.Name] == DBNull.Value) ? null : dataRow[afield.Name]; 
     ...  
     propertyInfos.SetValue(aTSource, value, null); 
     list.Add(aTSource); 
    } 
} 

valeurs de l'échantillon de aTSource:

IP_Address  null string 
Product Name null string 

Répondre

0

Créez deux boucles Foreach avec des instructions de remplacement, la première pour la liste des noms de champs Excel et la seconde pour les noms de champs WPF, afin que les noms de champs correspondent.

foreach (DataColumn column in dataTable.Columns) 
{ 
    column.ColumnName = column.ColumnName.Replace(" ", ""); 
    column.ColumnName = column.ColumnName.Replace("_", ""); 
} 
0

Si votre objectif est de simplement comparer deux chaînes, indépendamment des espaces et des underscores, vous pouvez créer une méthode d'extension qui les dépouiller et ne le comparez :

public static string SuperStrip(this string InputString) 
{ 
    if (string.IsNullOrWhiteSpace(InputString)) 
     return string.Empty; 

    return InputString.Replace(" ", string.Empty).Replace("_", string.Empty); 
} 

Chacune de ces expressions résulterait alors dans un état true:

bool foo; 
foo = "nicekitty".SuperStrip() == "nice kitty".SuperStrip(); 
foo = "nicekitty".SuperStrip() == "nice_kitty".SuperStrip(); 
foo = "nice_kitty".SuperStrip() == "nice kitty".SuperStrip(); 

Bien sûr, vous pouvez aussi envelopper que dans une seule fonction de les comparer:

public static bool HeaderCompare(string String1, string String2) 
{ 
    if (string.IsNullOrWhiteSpace(String1)) 
     String1 = string.Empty; 
    if (string.IsNullOrWhiteSpace(String2)) 
     String2 = string.Empty; 

    return String1.Replace(" ", string.Empty).Replace("_", string.Empty) == 
     String2.Replace(" ", string.Empty).Replace("_", string.Empty); 
} 

Ce presque semble trop simpliste, il est donc possible d'avoir mal compris votre tâche, donc si je suis hors sentir libre faites le moi savoir.

+0

Merci pour la suggestion, cependant, je cherchais vraiment un moyen de changer les noms de champs d'une liste T. "IP_Address" deviendrait "IPAddress" et "Product Name" deviendrait "ProductName". J'ai fini par résoudre ce problème en remplaçant le trait de soulignement et les espaces vides par un autre caractère "^", puis en faisant une comparaison pour ce nouveau caractère. – Kahlan