Вы можете использовать np.diag
, чтобы извлечь k
-ю диагональ, а затем сложить ее.
{str(i):np.sum(np.diag(match_score_matrix,k=i)) for i in range(-15,8)}
Вы не можете изменить определение класса во времени выполнения. Однако можно создать новый класс, который наследовался исходному классу (если это не sealed
), и объявляет поле. Можно сделать это путем испускания соответствующего кода IL с помощью System.Reflection.Emit
.
C# не позволяет его, потому что весь он - классы, основаны на Метаданных. CLR (не C#) запрещает добавление полей к метаданным во времени выполнения (1). Это - единственный способ, которым C# был бы в состоянии добавить поле в runitme.
Это непохоже на динамические языки, такие как IronPython, которые по существу не имеют конкретных классов метаданных. У них есть более динамические структуры, которые могут быть altereted во времени выполнения. Я полагаю, что IronPython просто сохраняет, это - участники (поля и методы) в том, какие суммы к хеш-таблице, которая может быть легко изменена во времени выполнения.
В C# 3.0, Ваш лучший ресурс должен использовать Отражение. Испустить. Но это генерирует совершенно новый класс по сравнению с изменением существующего.
(1) существуют определенные API, такие как профильные API или ENC, которые позволяют это, но я не уверен, расширяются ли их возможности до добавляющих полей.
Нет, C# не позволяет исправление обезьяны .
можно генерировать новый классы с помощью или CodeDOM или Отражения. Испустите, но Вы не можете изменить существующие.
Не точно.
Однако можно реализовать ICustomTypeDescriptor, чтобы приблизить его и затем просто использовать хеш-таблицу для хранения пар имени поля/значения. Много платформы, которая использует отражение, просит ICustomTypeDescriptor сначала.
Только в C# 4.0, который добавляет динамический поиск и основан на CLR 4.0, который включает ДОЛЛАР и затем он не будет строго добавлять к классу, поскольку классы не будут в изображении.
как другие уже сказали, это не возможно. Какова причина Вашего вопроса? Если необходимо хранить некоторые дополнительные данные в классе динамично, то Вы могли, вероятно, просто использовать словарь:
class My {
Dictionary<string, object> data;
public My() { data = new Dictionary<string, object>(); }
}
.. но это действительно зависит от того, чего Вы на самом деле хотите достигнуть?