var tbl = new Table();
...
tbl = (Table) tr.GetObject(im.Lookup(tblsty.ObjectId).Value, OpenMode.ForWrite);
Зачем выполнять инициализацию через new, если ты всё равно не используешь значение, но выполняешь повторное присвоение значения? Вопрос риторический. Тогда уж лучше так:
Получать Entity для каждого ObjectId лишь для того, чтобы проверить тип - это затратно и нецелесообразно. Имхо лучше так:
// за рамками цикла
var targetType = RXClass.GetClass(typeof(Entity));
..
// в цикле
if (id.ObjectClass.IsDerivedFrom(targetType)){
}
А это что за ужасы?
var ent = (Entity)myT.GetObject(obj, OpenMode.ForRead);
if (ent is Table)
{
var tblsty = (Table)myT.GetObject(obj, OpenMode.ForRead);
зачем тебе ещё и tblsty, если ты уже получил искомое в ent? Эти две переменные у тебя указывают на один и тот же объект. Кроме того, если объект вдруг окажется не Entity то в первой строке кода ты получишь исключение.
А этой строчкой кода ты что хотел сказать?
tbl = (Table) tr.GetObject(im.Lookup(tblsty.ObjectId).Value, OpenMode.ForWrite);
if (tblsty.TableStyleName.Equals(tableStyle))
А если регистр символов не совпадёт? Вопрос риторический.
Просто имена переменных корявые
Корявые имена способствуют соответствующему восприятию, путанице и появлению ошибок.
Честно говоря, мне даже "больно" читать твой код...