gpt4 book ai didi

c# - 使用表达式/lambda 设置属性值的通用方法

转载 作者:太空狗 更新时间:2023-10-29 23:01:47 25 4
gpt4 key购买 nike

我正在尝试找到一种通用方法来为 lambda 表达式指定的属性赋值,查看下面的示例代码,ConverToEntities 方法的签名看起来如何以及如何调用它?

static void Main()
{
List<long> ids = new List<long> {1, 2, 3};

//Non generic way
List<Data> dataItems = ids.ConvertToDataItems();

//Generic attempt!!
List<Data> differntDataItems =
ids.ConvertToEntities<Data>( p => p.DataId );
}

public class Data
{
public long DataId;
public string Name;
}

public static class ExtensionMethods
{
public static List<Data> ConvertToDataItems(this List<long> dataIds)
{
return dataIds.Select(p => new Data { DataId = p }).ToList();
}

public static List<T> ConvertToEntities<TProp>(
this List<long> entities, Func<TProp> lambdaProperty )
{
return entities.Select(p => new T {lambdaProperty} ).ToList();
}
}

最佳答案

好的。我能得到的最接近的是:

 class Program
{
static void Main(string[] args)
{
List<long> ids = new List<long> { 1, 2, 3 };

//Non generic way
List<Data> dataItems = ids.ConvertToDataItems();

//Generic attempt!!

Func<long, Data> selector = (p => new Data { DataId = p });
List<Data> differntDataItems = ids.ConvertToEntities<Data>(selector);
}
}

public class Data
{
public long DataId;
public string Name;
}

public static class ExtensionMethods
{
public static List<Data> ConvertToDataItems(this List<long> dataIds)
{
return dataIds.Select(p => new Data { DataId = p }).ToList();
}

public static List<TProp> ConvertToEntities<TProp>(this List<long> entities, Func<long, TProp> selector)
{
return entities.Select(selector).ToList();
}
}

这行得通。

我觉得您对自己真正想要的返回类型有点困惑。能够在方法调用或 smth 中指定我们想要的东西会很酷。例如:

    public static List<TProp> ConvertToEntities<T, TProp>(List<T> entities, Func<T, TProp> selector)
{
return entities.Select(selector).ToList();
}

这为我们在返回类型上提供了更大的灵 active 。但是由于我们使用扩展来做到这一点,我认为这是不切实际的,因为我们需要知道我们正在扩展什么类型:

this List<long> entities,

好问题。

编辑代码建议修复。

关于c# - 使用表达式/lambda 设置属性值的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com