Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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中实现#_C# - Fatal编程技术网

C# 两种不同的类型,一种方法在C中实现#

C# 两种不同的类型,一种方法在C中实现#,c#,C#,实现此场景的最佳方法是什么: 有服务方法和两种类型,它们仅在列表项类型上有所不同: public long MyMethod(MyType request) {...} 另外,我有两种几乎相似的型号: public class MyType { public int amount {get; set;} public List<MyDetailsType> details {get; set;} } public class MyType2 { publi

实现此场景的最佳方法是什么: 有服务方法和两种类型,它们仅在列表项类型上有所不同:

public long MyMethod(MyType request) {...}
另外,我有两种几乎相似的型号:

public class MyType {
    public int amount {get; set;}
    public List<MyDetailsType> details {get; set;}
}

public class MyType2 {
    public int amount {get; set;}
    public List<MyDetailsType2> details {get; set;}
}
适用于两种请求类型,而无过载?接口?抽象类?事实上的 而且该方法只调用一次,所以泛型类型不起作用,因为该方法需要定义参数类型,直到未设置变量,我才知道参数类型

应用程序流程如下所示:

  • 获取请求
  • 请求是根据某些条件生成的MyType或MyType2
  • 调用MyMethod

下面是一个可能的解决方案:

公共长MyMethod(MyBaseType请求){…}
公共抽象类MyBaseType
{
公共整数金额{get;set;}
公共列表详细信息{get;set;}
}
公共类MyType:MyBaseType
{
//附加代码
}
公共类MyType2:MyBaseType
{
//附加代码
}

如果派生类不需要额外的代码,则可以只使用一个类(不带
抽象
关键字)

Method1
代码如下所示:

void方法1(SomeType请求)
{
如果(a)
请求=新的MyBaseType();
其他的
请求=新的MyBaseType();
我的方法(请求);
}

根据涉及的操作,另一个选项可能是使
MyType
通用:
public class MyType{…List details;}
是的,我的第一种方法是这样的,但是当我们创建时:MyTypeAbstract someRequest;如果(someLogic){someRequest=new MyType()}或者{someRequest=new MyType2()}当并非所有子对象属性都在该变量上时,这看起来不正常,因为它的类型是抽象类类型。Klaus-那么如何在该方法中使用它?它是通过接口实现的。我需要为它提供参数类型。方法的调用也是一个。所以我写了“取决于所涉及的操作”。为了得到更明确的答案,我们需要知道您正在使用MyType做什么。如果不需要额外的代码怎么办?这些都是模型类,只因详细信息类型不同而不同?在if中分配变量时会出现问题,因为在初始化它时,它需要类型
var request
这不是有效的语句。但是我真的觉得OP需要提供更多的信息和背景,然后我们才能开始为这个问题提供好的解决方案。var不起作用,VS要求正确的类型,我以前不知道@rokash Method1()的方法签名是什么?
public long MyMethod(MyType request) {...}
Method1(SomeType request) {
    var request;
    if(a) {
       request = new MyType();
    } else {
       request = new MyType2();
    }

    MyMethod(request);
}