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

本文关键字:泛型方法 方法 面向对象的 转换 | 更新日期: 2023-09-27 18:30:59

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

我的德索德是这样的:

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();
    }

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

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

您可以按照您的模式创建一个泛型构造函数方法:

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));
}