1

我有这个方法:

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< ThisClassesType > currentConfig

如果我把它放在基类中IEnumerable<ConfigItem>,我必须用它来调用它:

client.ValidateOnInsert(defaultSystem, currentConfig.Cast<ConfigItem>());

这似乎有点愚蠢,因为诸如此类的东西client总是基于.ConfigItem

反正有没有像这样的东西:

public void ValidateOnInsert(ASystem system, IEnumerable<T> currentConfig) where T : ConfigItem(?)

或者只是以任何方式使整洁,不需要重复的代码或大量的转换?

谢谢,

J1M

4

1 回答 1

1

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

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

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

于 2012-11-26T14:13:04.680 回答