OK, la liste <> contient l'asReadonly () qui vous donne la lecture en échec. Ce dont j'ai besoin, c'est avoir un champ de type IList et une propriété qui retournerait une collection à la lecture de cette liste.
Exemple de classe: p> Le scénario est suivant: Je dois avoir une logique personnalisée à l'intérieur de ma classe lorsque l'élément est ajouté dans la liste et je tiens à restreindre Ajout à cette liste en appelant Addtolist (quelqueitem), tout en ne permettant pas d'utiliser l'utilisation de liste.Ajouter (quelqueitem). Le problème est que j'utilise NHibernate strud> lequel nécessite l'interface iliste forte>, donc je ne peux pas lancer / appeler l'asreadonly () sur l'iList (il ne contient pas cette méthode). < / p> Quelle façon recommanderiez-vous à résoudre cette situation? J'ai simplement besoin d'un moyen pour NHibernate de définir la collection nécessaire d'une manière ou d'une autre, mais j'ai aussi besoin de restreindre les utilisateurs. P> P>
5 Réponses :
Essayez
Ok, j'ai aussi pensé à cela, mais je préférerais la solution qui ne copie pas sur le contenu de la collection à une autre collection, et cela le fera en dessous, non?
Cela fera une copie ... Une solution sans copie n'est possible que si vous créez une classe, implémente l'interface IList et utilisez-la ...
@Yahia: mal. Cela ne crée pas de copie
Vous pouvez simplement imiter update strong>: Une collection en lecture seule est simplement une collection avec une enveloppe qui empêche la modification de la collection; Par conséquent, si des modifications sont apportées à la collection sous-jacente, la collection en lecture seule reflète ces changements. asreadonly () code>:
Cela ne crée pas une copie de la liste code>.
Readonlycollection Code> ne copie pas les données, il fonctionne directement sur la liste fournie. Voir Documentation : P>
Ce constructeur est une opération O (1). P>
blockQuote> p>
Cela créera-t-il une nouvelle collection avec itération via tous les articles, ou conserve la référence au basculement intérieur sous-jacent?
Cela ne crée pas de copie. C'est exactement le même code que celui utilisé dans asreadonly code>. Si vous ne voulez pas ce comportement, vous devez reformuler votre question.
Utilisez la manière suivante,
<bag name="SubTests" table="SubTest" lazy="true" access="field.camelcase-underscore" optimistic-lock="false" > <key column ="TestID" /> <many-to-many class="SubTest, Domain" column="SubTestID" /> </bag>
Vous pouvez également revenir ienumerable
À mon avis, la meilleure façon de le faire est de revenir ienumerable
public IEnumerable<Abc> Abcs {
get { return list.Skip(0); }
}
Vous voudrez peut-être aussi voir Stackoverflow.com/Questtions/5522654/...