如何避免异常功能的复制粘贴?

时间:2011-02-18 20:25:40

标签: c# .net

我在几个不同的C1,D2,F34类中有以下功能:

class C1
{
    void SomeFunc
    {
        Statement1();
        Obj = GetObj();
        Statement2(Obj);
    }
    IMyObj Obj{get;private set;}
}

public static class MyObjExt
{
    public static void Statement2(this IMyObj obj)
    {
        ... do validation of 'obj';
        ... throw exception if object state is wrong
    }
}

类C1,D2,F34不是同一层次结构的成员。

所以我想避免复制它们。

我可以这样做:

static MyObj MyFunc()
{
  Statement1();
  IMyObj obj = GetObj();
  Statement2(obj);

  return obj;
}
class C1
{
  void SomeFunc
  {
      Obj = MyFunc();
  }
  IMyObj Obj{get;private set;}
}

但如果“Statement2”函数抛出异常,则obj成员将保持未初始化...

我怎么能避免复制粘贴?

1 个答案:

答案 0 :(得分:1)

我有一个更复杂的解决方案:

class Extender
{
    static IMyObj MyFunc(out IMyObj obj)
    {
        Statement1();
        obj = GetObj();
        Statement2(obj);
    }
}

class C1
{
  void SomeFunc
  {
    IMyObj obj=null;
    try
    {
         MyFunc(out obj);
    }
    finally
    {
        Obj = obj;
    }
  }
  IMyObj Obj{get;private set;}
}

但我不确定它是否会且必须有效。这是好的还是坏的方法?

如果你觉得它很好 - 请投票,如果没有 - 请指出“为什么”?

非常感谢!

编辑:修改后添加了'SomeFunc'实现。