Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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#_Linq_Generics - Fatal编程技术网

C# 如何使异步静态方法具有相同的泛型数组参数和相同的泛型数组返回类型

C# 如何使异步静态方法具有相同的泛型数组参数和相同的泛型数组返回类型,c#,linq,generics,C#,Linq,Generics,我想对相同的代码执行两次,但只针对两个不同的对象。我从SOAP API(相当过时的API)获取这些对象。 我希望避免反复编写重复的代码。我将使用我的原始对象并对其进行大量操作(所有方式都是一样的)。唯一的区别是对象类型不同,所以这就是为什么我需要创建一个通用对象。我希望它返回作为参数的相同类型。我有一个问题,如果我做这样的代码 public static class ParamsHelper<T> { public static async Task<T[]> W

我想对相同的代码执行两次,但只针对两个不同的对象。我从SOAP API(相当过时的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[][].
公共静态类ParamsHelper
{
公共静态异步任务(T[]rptParams)
{
//做些事情来帮助他们
返回参数;
}
}
//然后我这样称呼它:
var params=await ParamsHelper.Whatever(new ItemP[]{});
//它表示无法将类型ItemP[]转换为类型ItemP[]。

另外,我使用LINQ来完成所有的操作。我想知道如何访问对象字段(可能是反射?)

您必须在方法上声明泛型类型

public static async Task<T[]> Whatever<T>(T[] rptParams)
公共静态异步任务(T[]rptParams)
用法通常是从用法中暗示出来的,因此您不必传递它

如果你必须通过它,不要让它成为一个数组

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

您的最后一句应该是一个单独的问题。在处理单个对象时,泛型通常没有帮助,因为泛型对象没有已知的属性。泛型在处理列表、数组、字典等时会发光。在处理单个对象时,您可以通过接口实现可重用性。@TheodorZoulias您能给我一个代码示例,说明如何通过接口实现这一点吗?@Leah您说您有两个不同的对象,以及这些对象的一些重复代码。它们有什么共同的属性吗?如果是,那么您应该能够使用这些公共属性定义,然后确保这两个对象都实现此接口。之后,您应该能够修改现有代码以使用此接口,而不是具体的类。@TheodorZoulias我无法从这些对象实现接口,因为它们不是我的对象。它们是soap api对象,那么我的类ParamsHelper呢?这样行吗?这只会造成混乱