【问题标题】:how to make asynchronous static method with same generic array param and same generic array return type如何使用相同的泛型数组参数和相同的泛型数组返回类型制作异步静态方法
【发布时间】:2019-06-12 02:08:53
【问题描述】:

我想对所有相同的代码执行两次,但只针对两个不同的对象。我从一个 SOAP API(相当过时的一个)获取这些对象。 我想避免一遍又一遍地编写重复的代码。我将使用我的原始对象并对其进行很多操作(以相同的方式)唯一的区别是对象类型是不同的,所以这就是我需要制作一个通用对象的原因。我希望它返回与作为参数相同的类型。我有一个问题,如果我做这样的代码

public static class ParamsHelper<T>
{
    public static async Task<T[]> Whatever(T[] rptParams)
    {
        //do some stuff to rptparams
        return rptParams;
    }
}

//  then I call it like this below:
var params = await  ParamsHelper.Whatever<ItemP[]>(new ItemP[]{});

//  it says can't convert type ItemP[] to type ItemP[][].

此外,我正在使用 LINQ 来完成所有操作。我想要关于如何访问对象字段的建议(也许是反射?)

【问题讨论】:

  • 你的最后一句话应该是一个单独的问题。
  • 在处理单个对象时,泛型通常没有帮助,因为泛型对象没有已知属性。泛型在处理列表、数组、字典等时大放异彩。处理单个对象时,您可以通过接口实现可重用性。
  • @TheodorZoulias 能否提供一个代码示例,说明我如何通过接口实现这一目标?
  • @Leah 你说你有两个不同的对象,以及这些对象的一些重复代码。它们有什么共同的属性吗?如果是,那么您应该能够使用这些公共属性定义一个interface,然后确保两个对象都实现此接口。之后,您应该能够修改现有代码以使用此接口而不是具体类。
  • @TheodorZoulias 我无法从这些对象实现接口,因为它们不是我的对象。它们是肥皂 api 对象

标签: c# linq generics


【解决方案1】:

你必须在方法上声明泛型类型。

public static async Task<T[]> Whatever<T>(T[] rptParams)

用法通常是从用法中隐含的,因此您不必传递它。

如果你必须传递它,不要让它成为一个数组。

ParamsHelper.Whatever<ItemP>(new ItemP[] { });

【讨论】:

  • 那么我的类 ParamsHelper 呢?可以吗?
  • 它只会造成混乱 IMO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多