2017-08-09 4 views
-2

Ich habe verschiedene Liste der benutzerdefinierten Klasse. und müssen nach den Eigenschaften von String suchen und den Wert der Eigenschaft überprüfen. Wenn etwas einen falschen Wert hat, dann ändere den Wert mit einem vordefinierten Wert. Dazu dachte ich, eine generische Methode der public IEnumerable validate (diese IEnumerable ListofData)Generische Erweiterungsmethode in C#

aber jetzt nicht in der Lage bin ich zu erstellen, die auf die Eigenschaften zu durchqueren und den Wert überprüfen und die gleiche Rückkehr nach Manipulation. senden Sie mir einige Links, damit ich Einblick bekommen kann.

Danke.

public static class ValidateExt 
{ 
    public static IEnumerable<T> ValidateStringData<T>(this IEnumerable<T> DataList) 
    { 
     PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T)); 
     foreach(T Item in DataList) 
     { 
      // here want to manipulate the date of those properties which is of string type and assign it back. 
     } 
    } 
} 
+0

nicht unhöflich zu sein, aber ich glaube nicht, dass dies eine Frage ist, klingt wie eine Nachfrage nach uns Ihre Forschung zu tun .. –

+1

würde vorschlagen, dass Sie einige Ihres Code posten, oder zumindest ein Beispiel wie du willst, dass es sich verhält. –

+0

Entschuldigung, bitte finden Sie den Code, den ich versucht habe. public static Klasse ValidateExt { public static IEnumerable ValidateStringData (dieses IEnumerable Datalist) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties (typeof (T)); foreach (T Element in DataList) { // Hier möchte das Datum der Eigenschaften, die von String-Typ ist, ändern und es zurück zuweisen. } } } –

Antwort

1

nicht sicher, wie Sie verschiedene Prüffunktionen für verschiedene String-Eigenschaften haben werden (oder verwenden Sie nur gleiche Logik für alle String-Objekte), aber hier ist beispielsweise, wie Sie alle String-Eigenschaften lesen kann und sie setzen etwas anderes zu sein, wenn eine Bedingung erfüllt ist.

public static IEnumerable<T> ValidateStringData<T>(this IEnumerable<T> dataList) 
{ 
    var properties = typeof(T).GetProperties().Where(p => p.PropertyType == typeof(string)).ToArray(); 
    foreach (var item in dataList) 
    { 
     foreach (var propertyInfo in properties) 
     { 
      var value = propertyInfo.GetValue(item, null) as string; 
      string newValue; 

      if (CheckString(value, out newValue)) 
      { 
       propertyInfo.SetValue(item, newValue, null); 
      } 
     } 

     yield return item; 
    } 
} 

private static bool CheckString(string value, out string newValue) 
{ 
    // do your validation logic here. 
} 
Verwandte Themen