我有这个方法:
public partial class Client : ConfigItem
{
public void ValidateForInsert(ASystem defaultSystem, IEnumerable<Client> currentConfig)
{
if (this.Source == defaultSystem.SystemName)
{
throw new InvalidOperationException(AMessage);
}
if (SomeOtherValidation())
{
throw new InvalidOperationException(AnOtherMessage);
}
}
}
它将存在于许多不同类型,所有类型都继承自CofigItem
所有代码都是相同的,所以我想把它移到基类。 除了参数包含 IEnumerable的&LT; ThisClassesType &GT; currentConfig
如果我把它放在IEnumerable<ConfigItem>
的基类中,我必须用:
client.ValidateOnInsert(defaultSystem, currentConfig.Cast<ConfigItem>());
由于client
之类的内容总是基于ConfigItem
,这似乎有点愚蠢。
无论如何都要提出类似的内容:
public void ValidateOnInsert(ASystem system, IEnumerable<T> currentConfig) where T : ConfigItem
(?)
或者只是任何方式使整洁,整洁,不需要重复的代码或大量的演员?
谢谢,
J1M
答案 0 :(得分:1)
目前尚不清楚这是否有效,因为您没有使用输入序列显示任何代码,但此可能有效:
public void ValidateForInsert<T>(ASystem defaultSystem,
IEnumerable<T> currentConfig)
where T : ConfigItem
这是一个通用方法,它采用T
类型的项目序列,其中T
必须是ConfigItem
或从中派生的某种类型。