转换面向对象的方法重复泛型方法

时间:2016-01-19 21:05:43

标签: c# oop generics

我正在使用返回通用结果的方法。但我看到我在重复自己。

我的方法是这样的:

public Result<Size> ResultForSize(){
    var result = new Result<Size>();

    try{
        result.data = service.GetBySize();
    }catch(){
        result.hasError = true;
    }
}

public Result<Color> ResultForColor(){
    var result = new Result<Color>();

    try{
        result.data = service.GetByColor();
    }catch(){
        result.hasError = true;
    }
}

public Result<Model> ResultForModel(int id){
    var result = new Result<Model>();

    try{
        result.data = service.GetByModdel(id);
    }catch(){
        result.hasError = true;
    }
}

我发现差异代码块只有try

    try {
        result.data = service.GetBySize();
    }

如何使用面向对象的方法并为此重复创建一个简短的解决方案。

1 个答案:

答案 0 :(得分:4)

您可以按照模式创建通用构造函数方法:

public static Result<T> CreateResult<T>(Func<T> constructor)
{
    var result = new Result<T>();
    try
    {
        result.data = constructor();
    }
    catch
    {
        result.hasError = true;
    }
    return result;
}

然后从这三种方法中调用它:

public Result<Size> ResultForSize()
{
    return CreateResult(() => service.GetBySize());
}

public Result<Color> ResultForColor()
{
    return CreateResult(() => service.GetByColor());
}

public Result<Model> ResultForModel(int id)
{
    return CreateResult(() => service.GetByModdel(id));
}