2017-07-27 58 views
0

我有下面的代码,我想变成一个通用的方法。如何使我的方法通用,从而可以传递属性?

List<VariationAttribute> variationAttributeList = new List<VariationAttribute>(); 

    //get a distinct list of colours 
    var colours = ap21Products.GroupBy(p => p.ColourCode).Select(g => g.First()); --this is different 

    var colourVariationAttribute = new VariationAttribute(); 
    colourVariationAttribute.AttributeId = "color"; --this is different 
    colourVariationAttribute.VariationAttributeId = "color"; --this is different 
    colourVariationAttribute.DisplayName = new DisplayName() { Text = "Colour" }; --this is different 
    colourVariationAttribute.VariationAttributeValues = new VariationAttributeValues(); 

    foreach (var c in colours) 
    { 
     var attributeValue = new VariationAttributeValue(); 
     attributeValue.Value = c.ColourCode; --this is different 
     attributeValue.DisplayValue = new DisplayValue() { Text = c.ColourName }; --this is different 

     colourVariationAttribute.VariationAttributeValues.VariationAttributeValue.Add(attributeValue); 
    } 
    variationAttributeList.Add(colourVariationAttribute); 

我的评论,我想通过这些数值在 - 字符串值都很好,但我不知道我如何去传递一个动态属性名称。

例如,在第4行,它是由p.ColourCode分组,但我希望能够通过属性进行分组。

同样,从底部4行,Text属性被设置为c.ColourName,但我想通过该属性也显示在那里。

我该怎么办? 我用这样的签名尝试,但都没有成功:

private VariationAttribute createVariationAttribute<TKey>(
    IList<Ap21Product> ap21Products, 
    string attributeId, 
    string attributeName, 
    Func<Ap21Product, TKey> groupingProperty, 
    Func<Ap21Product, TKey> groupingPropertyValue, 
    ) 

回答

1

你可以做这样的事情:

void something(IList<Ap21Product> ap21Products, 
    string attributeId, 
    string attributeName, 
    Func<Ap21Product, object> grouper, 
    Func<Ap21Product, string> colourCode, 
    Func<Ap21Product, string> displayValueText 
    ) 
{ 
    List<VariationAttribute> variationAttributeList = new List<VariationAttribute>(); 

    //get a distinct list of colours 
    var colours = ap21Products.GroupBy(grouper).Select(g => g.First()); // this is different 

    var colourVariationAttribute = new VariationAttribute(); 
    colourVariationAttribute.AttributeId = "color"; // this is different 
    colourVariationAttribute.VariationAttributeId = "color"; // this is different 
    colourVariationAttribute.DisplayName = new DisplayName() { Text = "Colour" }; // this is different 
    colourVariationAttribute.VariationAttributeValues = new VariationAttributeValues(); 

    foreach (var c in colours) 
    { 
     var attributeValue = new VariationAttributeValue(); 
     attributeValue.Value = colourCode(c); 
     attributeValue.DisplayValue = new DisplayValue() { Text = displayValueText(c) }; 

     colourVariationAttribute.VariationAttributeValues.VariationAttributeValue.Add(attributeValue); 
    } 
    variationAttributeList.Add(colourVariationAttribute); 
} 
+0

谢谢..工作一种享受。 – Lock

相关问题