动态转换调用适当的重载

Dav*_*ita 3 c# generics

我有一个公共泛型方法,它接受一个通用参数.我还有一些私有方法接受我从泛型方法调用的具体类型参数.为了更好地描述我的问题,请看下面的代码:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

和私人方法:

private void Save(ProcessName proc){}
private void Save(ProductType type){}
private void Save(Folder folder){}
...
Run Code Online (Sandbox Code Playgroud)

看看代码,我真的不喜欢这个解决方案,检查每个可能的类型看起来像是一个糟糕的做法imho.所以我想知道我的问题是否有更清洁的解决方案?也许可以在运行时动态转换T并调用适当的私有方法?

Ser*_*kiy 6

使用运行时类型定义:

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){}
Run Code Online (Sandbox Code Playgroud)

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

private void Save(object obj) {  }
Run Code Online (Sandbox Code Playgroud)

  • 你好,downvoter.一些解释,如果有的话? (3认同)