如何使这个C#方法更通用?

时间:2012-11-26 14:02:13

标签: c#

我有这个方法:

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

1 个答案:

答案 0 :(得分:1)

目前尚不清楚这是否有效,因为您没有使用输入序列显示任何代码,但此可能有效:

public void ValidateForInsert<T>(ASystem defaultSystem,
                                 IEnumerable<T> currentConfig)
    where T : ConfigItem

这是一个通用方法,它采用T类型的项目序列,其中T必须是ConfigItem或从中派生的某种类型。