Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 使用泛型类型';映射器<;T>';需要1个类型参数_C# - Fatal编程技术网

C# 使用泛型类型';映射器<;T>';需要1个类型参数

C# 使用泛型类型';映射器<;T>';需要1个类型参数,c#,C#,我有以下课程: public class Mapper<T> { public static Mapper<T> GetFor<TKey>(T type) { return new Mapper<T>(); } public static Mapper<T> GetFor<TKey>(IEnumerable<T> types) { return new Mapper<T>

我有以下课程:

public class Mapper<T> {

  public static Mapper<T> GetFor<TKey>(T type) {
    return new Mapper<T>();
  }

  public static Mapper<T> GetFor<TKey>(IEnumerable<T> types) {
    return new Mapper<T>();
  }  

  public Mapper<T> Add<TKey>(Expression<Func<T, TKey>> expression, String name) {

    _fields.Add(name, expression);
    return this;

  }

}
但我得到了一个错误:

Using the generic type 'Mapper<T>' requires 1 type arguments
使用泛型类型“Mapper”需要1个类型参数
我还尝试了以下方法:

public class MapperFactory {
  public static Mapper<T> CreateMapperFor<T>(IEnumerable<T> typeProvider) {
    return new Mapper<T>();
  }
}

var a = new { /* ... */ }
var b = MapperFactory.CreateMapperFor(a);
公共类MapperFactory{
公共静态映射器CreateMapperf(IEnumerable typeProvider){
返回新映射器();
}
}
var a=new{/*…*/}
var b=MapperFactory.CreateMapperFor(a);
使用factory类可以很好地工作

  • 如何解决第一个版本的问题
  • 我应该在Mapper中使用方法还是使用工厂
  • 我这样做只是因为我遇到了类型为匿名的情况

    如何解决第一个版本的问题

    你没有。要在泛型类中调用静态方法,需要指定泛型类型参数

    我应该在Mapper中使用方法还是使用工厂

    使用非泛型工厂类。如果需要,只需调用factory类
    Mapper
    。这就是.NET framework所做的:

    • Tuple
      是一个泛型类
    • Tuple
      是包含
      创建(T1项1,T2项2)
      的工厂类
    如何解决第一个版本的问题

    你没有。要在泛型类中调用静态方法,需要指定泛型类型参数

    我应该在Mapper中使用方法还是使用工厂

    使用非泛型工厂类。如果需要,只需调用factory类
    Mapper
    。这就是.NET framework所做的:

    • Tuple
      是一个泛型类
    • Tuple
      是包含
      创建(T1项1,T2项2)
      的工厂类

    @Heinzi是对的,您不能这样做,最好使用非泛型类中声明的工厂方法。如果您真的想使用<代码>映射器< /代码>作为<代码> TypeName <代码>(虽然我不认为它是一个好的实践),您可以定义<代码>静态类映射器< /> >,并在那里声明方法

    public static class Mapper
    {
        public static Mapper<T> GetFor<T>(T type)
        {
            return new Mapper<T>();
        }
    }
    
    公共静态类映射器
    {
    公共静态映射器GetFor(T类型)
    {
    返回新映射器();
    }
    }
    
    @Heinzi是对的,您不能这样做,最好使用非泛型类中声明的工厂方法。如果您真的想使用<代码>映射器< /代码>作为<代码> TypeName <代码>(虽然我不认为它是一个好的实践),您可以定义<代码>静态类映射器< /> >,并在那里声明方法

    public static class Mapper
    {
        public static Mapper<T> GetFor<T>(T type)
        {
            return new Mapper<T>();
        }
    }
    
    公共静态类映射器
    {
    公共静态映射器GetFor(T类型)
    {
    返回新映射器();
    }
    }
    
    没有像
    映射器那样的类,只有
    映射器,所以不能对这样一个不存在的类调用静态方法(即
    Mapper.GetFor
    不解析)

    您需要为此创建非泛型帮助器类:

    public class Mapper
    {
        public static Mapper<T> GetFor<T>(T templateObject)
        {
            return new Mapper<T>();
        }
    }
    

    没有像
    Mapper
    这样的类,只有
    Mapper
    ,因此不能对这样一个不存在的类调用静态方法(即
    Mapper.GetFor
    无法解析)

    您需要为此创建非泛型帮助器类:

    public class Mapper
    {
        public static Mapper<T> GetFor<T>(T templateObject)
        {
            return new Mapper<T>();
        }
    }
    

    为什么在第一个示例中需要
    TKey
    ?@YacoubMassad刚刚添加了缺少的Add方法,这就是我使用TKey的原因。在
    GetFor
    方法中仍然不需要
    TKey
    。而且函数中似乎没有使用参数
    type
    。(或
    类型
    )@DavidG您能添加一些代码吗?我不知道你的意思。为什么在第一个示例中需要
    TKey
    ?@YacoubMassad刚刚添加了缺少的Add方法,这就是我使用TKey的原因。你仍然不需要
    GetFor
    方法中的
    TKey
    。函数中似乎没有使用参数
    type
    。(或
    类型
    )@DavidG您能添加一些代码吗?我不知道你的意思。@MiguelMoura:哪一部分?你的工厂课很好!如果要遵循Tuple使用的模式,只需将上一个代码示例中的
    MapperFactory
    替换为
    Mapper
    。但是,调用它也没有什么错:它更显式,这是Java代码中通常要做的事情。我正要说同样的话,但没有非常好的元组示例。@MiguelMoura:哪一部分?你的工厂课很好!如果要遵循Tuple使用的模式,只需将上一个代码示例中的
    MapperFactory
    替换为
    Mapper
    。但是,调用它
    MapperFactory
    也没有什么错:它更显式,这是Java代码中通常要做的事情。我也要这么说,但没有非常好的元组示例。