gpt4 book ai didi

c# - 动态转换以调用适当的重载

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

我有一个接受一个通用参数的公共(public)通用方法。我也有几个私有(private)方法接受我从泛型方法调用的具体类型参数。为了更好地描述我的问题,请看下面的代码:

    public void Save<T>(T entity) where T : class
{
if(entity is LibraryItem) Save(entity as LibraryItem);
else if(entity is Folder) Save(entity as Folder);
else if(entity is ProductType) Save(entity as ProductType);
else if(entity is ProcessName) Save(entity as ProcessName);
}

和私有(private)方法:

private void Save(ProcessName proc){}
private void Save(ProductType type){}
private void Save(Folder folder){}
...

看看代码,我真的不喜欢这个解决方案,检查每一种可能的类型看起来都是不好的做法恕我直言。所以我想知道我的问题是否有更清洁的解决方案?也许可以在运行时动态转换 T 并调用适当的私有(private)方法?

最佳答案

使用运行时类型定义:

public void Save<T>(T entity) where T : class
{
Save((dynamic)entity);
}

private void Save(LibraryItem lib){}
private void Save(ProcessName proc){}
private void Save(ProductType type){}
private void Save(Folder folder){}

您还需要一个带有对象类型参数的方法来处理实体不是 LibraryItem、ProcessName、ProductType 或 Folder 的情况:

private void Save(object obj) {  }

关于c# - 动态转换以调用适当的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221829/

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