gpt4 book ai didi

C# 在 lambda 中转换对象

转载 作者:行者123 更新时间:2023-11-30 22:40:13 25 4
gpt4 key购买 nike

我目前正在尝试设置一个我在业务逻辑中需要的字段,在这种情况下是惰性的。(是的不是属性,需要设置字段)我收到 Lazy 无法转换为 Lazy 的错误如您所见:

Object of type 'BusinessLogic.Lazy1[System.Object]'
cannot be converted to type
'BusinessLogic.Lazy
1[BusinessLogic.ArtikelBLL]

我使用这一行来获取动态存储库。

dynamic repository = Activator.CreateInstance(typeof(GenericRepository<>).MakeGenericType(typeArgs));

然后我尝试设置该字段的值但失败了:

fInfo.SetValue(obj, Lazy.From(() => repository.GetDataById(id)));

我尝试了很多不同的方法来解决它。我必须以某种方式将 repository.GetDataById(id) 转换为它正在寻找的实体,在本例中为 ArtikelBLL(我可以通过 pInfo.PropertyType 获得)。但是通过执行 (ArtikelBLL)repository.GetDataById(id) 它不会保持面向对象。有人可以帮我解决这个问题吗?

最佳答案

最简单的方法是在 lambda 中使用强制转换:

fInfo.SetValue(obj, new Lazy<GenericBLL>(
() => (ArtikelBLL) repository.GetDataById(id)));

毕竟,这就是 Lazy<T> 的类型想要。

编辑:如果您尝试动态执行此操作,我建议您编写如下通用方法:

public Lazy<T> CreateLazyDataFetcher<T>(dynamic repository)
{
return new Lazy<T>(() => (T) repository.GetDataById(id));
}

然后用反射调用那个方法。 (使用 MethodInfo.MakeGenericMethod(...).Invoke(...) )

关于C# 在 lambda 中转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340970/

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