我有一个公共泛型方法,它接受一个通用参数.我还有一些私有方法接受我从泛型方法调用的具体类型参数.为了更好地描述我的问题,请看下面的代码:
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并调用适当的私有方法?
使用运行时类型定义:
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)