У нас есть две проблемы, с которыми можно справиться.
GetHashCode()
, если любое поле в объекте может быть изменено. Также часто объект никогда не будет использоваться в коллекции, которая зависит от GetHashCode()
. Таким образом, стоимость реализации GetHashCode()
часто не стоит того, или это невозможно. GetHashCode()
, и вы переопределили Equals()
, не делая GetHashCode()
ведут себя корректно, этот человек может потратить дни на отслеживание проблемы. Поэтому по умолчанию я делаю.
public class Foo
{
public int FooId { get; set; }
public string FooName { get; set; }
public override bool Equals(object obj)
{
Foo fooItem = obj as Foo;
return fooItem.FooId == this.FooId;
}
public override int GetHashCode()
{
// Some comment to explain if there is a real problem with providing GetHashCode()
// or if I just don't see a need for it for the given class
throw new Exception("Sorry I don't know what GetHashCode should do for this class");
}
}
Можно использовать следующую функцию:
DESCRIBE TABLE <itab-Name> LINES <variable>
После вызова, переменная содержит количество строк внутренней таблицы.
если я понимаю Ваш вопрос правильно, Вы хотите знать номер строки во время условного цикла по внутренней таблице. Можно использовать системную переменную sy-tabix, если Вы работаете с внутренними таблицами. См. документацию ABAP, если Вам нужно больше информации (особенно глава по внутренняя таблица, обрабатывающая ).
Пример:
LOOP AT itab INTO workarea
WHERE tablefield = value.
WRITE: 'This is row number ', sy-tabix.
ENDLOOP.
Существует также встроенная функция для этой задачи:
variable = lines( itab_name ).
Точно так же, как "чистый" синтаксис ABAP, описанный IronGoofy, функциональные "строки ()" пишет количество строк таблицы itab_name в переменную.