什么是传递类实例组的简洁方法,而无需创建额外的'事务'班?

时间:2015-05-18 11:42:23

标签: c#

为了解释,API中的每个方法都必须返回Result类的实例以及传回的任何其他对象。

如果我有两个课程,我想作为单个项目和列表传回:

public class Foo
{
}

public class Bar
{
}

这意味着我需要传回四个交易类:

public class Result
{
}

public class ApiFoo
{
    public Result Result;
    public Foo Foo;
}

public class ApiFooList
{
    public Result Result;
    public List<Foo> FooList;
}

public class ApiBar
{
    public Result Result;
    public Bar Bar;
}

public class ApiBarList
{
    public Result Result;
    public List<Bar> BarList;
}

我确信必须有更好的方法来传回正确的收藏品。

任何人都可以提出更好的建议吗?

感谢。

2 个答案:

答案 0 :(得分:4)

在我阅读时提出这个问题,我承认,这并没有太多的信心,仿制药可能有所帮助。您可以创建一个可以封装所有类型的类,例如:

class ResultWrapper<T>
{
    public Result Result;
    public T Value;
}

然后你可以:

return new ResultWrapper<Foo>();
return new ResultWrapper<Bar>();

或者:

return new ResultWrapper<List<Foo>>();
return new ResultWrapper<IEnumerable<Bar>>();

或者,如果您需要从不同的视点区分列表和单个项目,可以添加:

class ResultListWrapper<T>
{
    public Result Result;
    public List<T> Values;
}

return new ResultListWrapper<Foo>();

更进一步,你还没有充实Result课程,但你可以随时将泛型应用于该课程:

class Result<T>
{
    // Existing Result members.
    public T Value;
}

泛型本身也是使用C#进行开发时的一个重要主题,它被广泛使用。有关详细信息,请参阅MSDN documentation

答案 1 :(得分:1)

您应该使用Generic功能。您可以执行以下操作:

public class SR<T>
    {
        public T Result { get; set; }
        public T GetResult()
         {
            return Result;
         }
    }


 var result = new SR<Bar>(); or  var result = new SR<List<Bar>>();