2016-08-25 3 views
0

Ich habe zwei Funktionen in ASP.NET MVC. Wie konvertiere ich diese Funktionen in generische Klasse (Klasse)?Wie generische T-Klasse erstellen?

public JsonResult CreateProduct(List<Product> Products, List<GroupExpression> GroupExpression) 
    { 
     List<GroupExpression> InvalidGroupExpression = ValidateColumnInList(Products, GroupExpression); 
     if (InvalidGroupExpression.Count() <= 0) 
     { 
      string[] Fields = GroupExpression.Select(x => x.ExpressionName).ToArray(); 
      var LambdaExp = GroupExpressionBuilder.GroupByExpression<Product>(Fields); 
      IEnumerable<Product> DuplicateProducts = Products.GroupBy(LambdaExp.Compile()).Where(g => g.Skip(1).Any()).SelectMany(g => g).ToList(); 
      IEnumerable<object> Indices = DuplicateProducts.Select<Product, object>(x => Products.IndexOf(x)).ToList(); 

      return Json(new { Success = true, Indices }, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      //return Json(new { Message = false }); 
      return Json(new { Success = false, InvalidGroupExpression }, JsonRequestBehavior.AllowGet); 
     }    
    } 
    public List<GroupExpression> ValidateColumnInList(List<Product> Products, List<GroupExpression> GroupExpression) 
    { 
     //bool IsValid = true; 
     List<GroupExpression> TempGroupExpression = new List<GroupExpression>(); 
     foreach (var GrpExpression in GroupExpression) 
     { 
      bool IsContainColumn = typeof(Product).GetProperties().Any(column => column.Name == GrpExpression.ExpressionName); 
      if (!IsContainColumn) 
      { 
       TempGroupExpression.Add(GrpExpression); 
       //IsValid = false; 
      } 
     } 
     //GroupExpression.RemoveAll(x => TempGroupExpression.Contains(x)); 
     //return IsValid; 
     return TempGroupExpression; 
    } 

In den oben genannten Funktionen. Ich wollte List Products, List GroupExpression in Parameter umwandeln. Ich bin neu in T-Klassen. Wie mache ich das?

+0

Funktionen zur Klasse? Was versuchst du zu erreichen? Es ist sehr unklar, was du damit machen wirst. – Szer

Antwort

2

Die Signaturen für die Funktionen wären wie folgt.

public JsonResult CreateProduct<T>(List<T> Products, 
            List<GroupExpression> GroupExpression) 
{ 
} 

public List<T> ValidateColumnInList<T>(List<T> Products, 
             List<GroupExpression> GroupExpression) 
{ 
} 
+0

Ja natürlich, danke für den Kommentar. – Codor

0

Um Ihre spezifische Situation würden Sie so etwas wie die folgenden werden aufzublicken:

class SomeClass 
{ 

    public void SomeMethod() 
    { 
     var groupExpressions = new List<GroupExpression>(); 
     // populate GroupExpressions somehow 
     var validatedGroups = ValidateColumnInList<Product, GroupExpression>(groupExpressions); 
    } 

    public List<TGroup> ValidateColumnInList<TItem, TGroup>(List<TGroup> GroupExpression) where TGroup: GroupExpression 
    { 
     List<TGroup> TempGroupExpression = new List<TGroup>(); 
     var itemProperties = typeof(TItem).GetProperties(); 
     foreach (var GrpExpression in GroupExpression) 
     { 
      bool IsContainColumn = itemProperties.Any(column => column.Name == GrpExpression.ExpressionName); 
      if (!IsContainColumn) 
      { 
       TempGroupExpression.Add(GrpExpression); 
      } 
     } 
     return TempGroupExpression; 
    } 

    public JsonResult CreateProduct<TItem, TGroup>(List<TItem> Products, List<TGroup> GroupExpression) where TGroup : GroupExpression 
    { 
     List<TGroup> InvalidGroupExpression = ValidateColumnInList<TItem, TGroup>(GroupExpression); 
     if (InvalidGroupExpression.Count() <= 0) 
     { 
      string[] Fields = GroupExpression.Select(x => x.ExpressionName).ToArray(); 
      var LambdaExp = GroupExpressionBuilder.GroupByExpression<TItem>(Fields); 
      IEnumerable<TItem> DuplicateProducts = Products.GroupBy(LambdaExp.Compile()).Where(g => g.Skip(1).Any()).SelectMany(g => g).ToList(); 
      IEnumerable<object> Indices = DuplicateProducts.Select<TItem, object>(x => Products.IndexOf(x)).ToList(); 

      return Json(new { Success = true, Indices }, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      //return Json(new { Message = false }); 
      return Json(new { Success = false, InvalidGroupExpression }, JsonRequestBehavior.AllowGet); 
     } 
    } 

} 

internal class Product 
{ 
} 

internal class GroupExpression 
{ 
    public string ExpressionName; 
} 

I List<TItem> items von der Methode params entfernt, da Sie nur die Art verwenden davon Eigenschaften zu iterieren und Verwenden Sie es dagegen, ob es validiert werden soll oder nicht.

Verwandte Themen