首頁 > 後端開發 > C++ > 如何在 C# 中向屬性動態新增屬性而不出現「集合具有固定大小」異常?

如何在 C# 中向屬性動態新增屬性而不出現「集合具有固定大小」異常?

Mary-Kate Olsen
發布: 2024-12-29 12:07:11
原創
923 人瀏覽過

How to Dynamically Add Attributes to Properties in C# Without the

在運行時向屬性動態添加屬性

在運行時向屬性添加屬性可以靈活配置和驗證物件。但是,在使用某些方法時,您可能會遇到「集合大小固定」異常。

異常的起源

當您嘗試修改集合時,會發生此錯誤屬性描述符的內建屬性集合,通常定義為固定大小的陣列。直接修改此集合可能會導致異常。

解決方案

要避免此問題,您可以動態建立一個新的屬性集合,而不是修改現有屬性集合。以下是程式碼的修訂版本:

var propDesc = TypeDescriptor.GetProperties(typeof(T))[propName];

var newAttribs = propDesc.Attributes.Cast<Attribute>().ToList();
var attribute = new RequiredAttribute();
newAttribs.Add(attribute);

// Set the new attributes collection in the property descriptor
propDesc.SetAttributeCollection(new ReflectiveAttributeCollection(newAttribs));
登入後複製

此程式碼建立一個具有所需屬性的新 ReflectiveAttributeCollection,包括RequiredAttribute。透過在 PropertyDescriptor 中設定這個新集合,您可以動態地為屬性新增屬性。

其他注意事項

  • 反射性能:使用反射會影響效能,因此請使用它
  • 屬性限制:並非所有屬性都可以動態新增。確保您要新增的屬性支援此功能。
  • 屬性快取:屬性描述符屬性快取在 TypeDescriptor 類別中,因此您可能需要清除快取才能觸發屬性變更。

透過遵循這些準則,您可以在運行時成功向屬性添加屬性並增強程式碼的靈活性。

以上是如何在 C# 中向屬性動態新增屬性而不出現「集合具有固定大小」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板