【问题标题】:Creating generic method创建泛型方法
【发布时间】:2016-04-28 20:38:37
【问题描述】:

有人可以帮忙解决以下问题吗...这让我发疯了...

// Three methods, virtually identical with the exception of the select field
public IEnumerable<int> GetBrandID()
{
    return myData.Select(m => m.BrandID).Distinct();
}
public IEnumerable<int> GetModelID()
{
    return myData.Select(m => m.ModelID).Distinct();
}
public IEnumerable<int> GetVehicleID()
{
    return myData.Select(m => m.VehicleID).Distinct();
}

// How to create one method which returns the type specified in the parameter??
public IEnumerable<int> GetData(??? myType)
{
    return myData.Select(m => myType).Distinct();
}

【问题讨论】:

  • 一个海盗问另一个,“为什么那个轮子会从你的裤子里伸出来?”...

标签: c# linq


【解决方案1】:

听起来你可能只需要一个Func&lt;Model, int&gt; 参数:

public IEnumerable<int> GetData(Func<Model, int> projection)
{
    return myData.Select(projection).Distinct();
}

然后你可以:

var modelIds = GetData(m => m.ModelID);
var vehicleIds = GetData(m => m.VehicleID);

这就是你所追求的吗? (假设myDataIEnumerable&lt;Model&gt;。如果是IQueryable&lt;Model&gt;,您可能希望接受Expression&lt;Func&lt;Model, int&gt;&gt;。)

【讨论】:

  • 非常感谢您的帮助,它清楚明了,对我帮助很大。非常感激。 X22。
【解决方案2】:

尚不清楚您到底在追求什么。也许是这样的?

public static IEnumerable<TResult> GetData<TModel, TResult> (this IEnumerable<TModel> enumerable, Func<TModel, TResult> projection)
{
    return enumerable.Select(projection);
}

而不仅仅是这样调用:

var ints = myData.GetData<MyModel,int>(m=>m.ModelID).Distinct();
var doubles = myData.GetData<MyModel,double>(m=>m.DoubleProp).Distinct();

等等……

【讨论】:

  • 请注意,如果您也提供数据,则添加方法没有任何好处 - var ints = myData.Select(m =&gt; m.ModelID).Distinct()...
【解决方案3】:
public ICollection<T> FindAllWhere(Expression<Func<T, bool>> selectSelector)
{
    ICollection<T> elements = EntitySet.Select(selectSelector).ToList().Distinct();

    return elements;
}

【讨论】:

  • 这似乎没有回答这个问题,IMO...它看起来像是对另一个问题的回答。
  • 它更通用,可以改变int的事件类型
  • 不,目前它甚至无法编译。让我们从回答 OP 的实际要求的内容开始,然后再尝试使其比 taht 更通用。
猜你喜欢
  • 2021-02-18
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多