再看《C#函数式编程》一书的时候看到HOF的概念,感觉在日常开发的过程中可以使用此方式整理一个拓展方法,实现程序的快速调用。

  1. Transaction函数继承自IDisposable
  2. 我们平时开发需要使用using内部对Revit进行操作。实现自动拆卸
  3. 我们需要创建一个泛型函数MTransaction并约束在IDisposable接口
  4. 在上述函数内部实现using关键词减少其他函数内部的反复调用,减少代码量降低耦合性
  5. 创建函数TransactionHelper对此放大引用封装,通过第三方调用中间函数即可完成调用

函数结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static class MTransaction
{
public static void Using<TDisp>(TDisp disposable, Action<TDisp> f) where TDisp : IDisposable
{
using (disposable)
{
f(disposable);
}
}
}

public static class TransactionHelper
{
public static void Execute(Document doc, Action<IDisposable> f)
=> MTransaction.Using(new Transaction(doc, "create"), trans =>
{
trans.Start();
f(trans);
trans.Commit();
});
}

调用此方法

1
2
3
4
5
TransactionHelper.Execute(doc, c =>
{
var line = Line.CreateBound(new XYZ(0, 0, 0), new XYZ(2000 / 304.8, 2000 / 304.8, 0));
Wall w = Wall.Create(doc, line, new ElementId(311), false);
});