[英]How to create generic T class?
我在ASP.NET MVC中有兩個功能。 如何將這些函數轉換為通用類(class)?
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;
}
在以上功能中。 我想將列表產品,列表GroupExpression轉換為參數。 我是T課的新手。 我該怎么做呢?
這些功能的簽名如下。
public JsonResult CreateProduct<T>(List<T> Products,
List<GroupExpression> GroupExpression)
{
}
public List<T> ValidateColumnInList<T>(List<T> Products,
List<GroupExpression> GroupExpression)
{
}
對於您的特定情況,您將查找以下內容:
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;
}
我從方法參數中刪除了List<TItem> items
,因為您只使用它的類型來迭代屬性,並使用它來匹配是否應進行驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.