gpt4 book ai didi

c# - 检查 T 是否实现接口(interface)并在填充接口(interface)属性后返回 T

转载 作者:行者123 更新时间:2023-12-02 08:53:01 25 4
gpt4 key购买 nike

我有一个通用方法,它将 T 列表作为参数。我试图根据接口(interface)类型获取某些数据,并仅填充列表中每个项目在接口(interface)中定义的属性。

所以我的基本界面是:

public interface IStatusResult
{
int Status { get; set; }
string StatusName { get; set; }
}

我有许多其他接口(interface)来实现此接口(interface),我想用它们来确定要检索的状态/状态名称键/值对:

public interface IROQStatusResult: IStatusResult { }
public interface IOrderStatusResult: IStatusResult { }
public interface IActivityStatusResult: IStatusResult { }

最后,我在搜索结果类中实现了这个接口(interface):

public class RecommendedOrderQuantitySearchResult:IROQStatusResult {
public int Id { get; set; }
public DateTime TargetDate { get; set; }
public int Status { get; set; }
public string StatusName { get; set; }
}

因此,一旦从数据库获取列表,我想在通用方法中设置状态名称:

    public static List<T> PopulateStatusNames<T>(List<T> items) where T:class
{
Dictionary<int, string> statuses = new Dictionary<int, string>();
if (typeof(IROQStatusResult).IsAssignableFrom(typeof(T))) {
statuses = GlobalConstants.GetROQStatuses();
}

if (typeof(IOrderStatusResult).IsAssignableFrom(typeof(T))){
statuses = GlobalConstants.GetOrderStatuses();
}


foreach (var item in items)
{
item.StatusName = statuses[item.Status];
}

return items;
}

目前,item.StatusName 给我一个错误:项目没有属性StatusName

我该如何实现这个?

最佳答案

使用OfType,它将仅返回那些可以安全地转换为类型的内容:

foreach (var item in items.OfType<IStatusResult>())
{
item.StatusName = statuses[item.Status];
}

关于c# - 检查 T 是否实现接口(interface)并在填充接口(interface)属性后返回 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52453806/

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