Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型过载歧义 阅读之后,我提出了一般的建议:“考虑重命名一些方法来减少重载的程度。在跨继承层次结构时,这个建议要加倍。”_C#_Generics_Overloading - Fatal编程技术网

C# 泛型过载歧义 阅读之后,我提出了一般的建议:“考虑重命名一些方法来减少重载的程度。在跨继承层次结构时,这个建议要加倍。”

C# 泛型过载歧义 阅读之后,我提出了一般的建议:“考虑重命名一些方法来减少重载的程度。在跨继承层次结构时,这个建议要加倍。”,c#,generics,overloading,C#,Generics,Overloading,但是我想进一步理解这种模糊性(看看我是否可以保留重载!) 这些只是一些测试帮助程序,用于帮助剔除那些可能需要各种视图模型首先处于某种有效或无效状态的冗长测试的一部分 我开始在没有继承关系的双视图模型上使用这些帮助程序,它们工作得很好 然后我决定另一个对ViewModelWrapper的另一个oveload有用,它是其他视图模型类型的基类。因此,编译器抱怨说,它不知道将哪个扩展用于VmWrapper以前工作的子类 在这种情况下,这是下面代码中的第三个重载和第一个重载。正如我所暗示的,我已经消除了重

但是我想进一步理解这种模糊性(看看我是否可以保留重载!)

这些只是一些测试帮助程序,用于帮助剔除那些可能需要各种视图模型首先处于某种有效或无效状态的冗长测试的一部分

我开始在没有继承关系的双视图模型上使用这些帮助程序,它们工作得很好

然后我决定另一个对ViewModelWrapper的另一个oveload有用,它是其他视图模型类型的基类。因此,编译器抱怨说,它不知道将哪个扩展用于VmWrapper以前工作的子类

在这种情况下,这是下面代码中的第三个重载和第一个重载。正如我所暗示的,我已经消除了重载,但是

有人知道我该如何保持这些超负荷工作吗

干杯,
贝里尔

//SatVm
公共静态void MakeValid(此ISatelliteVm实例,IEntityValidator验证器){…}
//HubVm
公共静态void MakeValid(此HubViewModel实例,IEntityValidator验证器,bool bValid=true)
其中TParentModel:Entity{…}
//VmWrapper
公共静态void MakeValid(此ViewModelWrapper实例,IEntityValidator验证器){…}

您只需按vm类型为每组扩展使用单独的名称空间即可

namespace Extensions.Satellite
{
    // SatVm
    public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...}
}

namespace Extensions.Hub
{
    // HubVm
    public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true)
        where TParentModel : Entity {   ... }
}

namespace Extensions.Wrapper
{
    // VmWrapper    
    public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... }
}
namespace Extensions.Satellite
{
//SatVm
公共静态void MakeValid(此ISatelliteVm实例,IEntityValidator验证器){…}
}
命名空间扩展.Hub
{
//HubVm
公共静态void MakeValid(此HubViewModel实例,IEntityValidator验证器,bool bValid=true)
其中TParentModel:Entity{…}
}
名称空间扩展.Wrapper
{
//VmWrapper
公共静态void MakeValid(此ViewModelWrapper实例,IEntityValidator验证器){…}
}
然后使用正确的名称空间


在相关新闻中,您可能想查看以下内容:

这看起来像是黑客攻击,对不起。
namespace Extensions.Satellite
{
    // SatVm
    public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...}
}

namespace Extensions.Hub
{
    // HubVm
    public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true)
        where TParentModel : Entity {   ... }
}

namespace Extensions.Wrapper
{
    // VmWrapper    
    public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... }
}