当前位置:网站首页>Type anonyme (Principes fondamentaux du Guide c)
Type anonyme (Principes fondamentaux du Guide c)
2022-04-23 08:29:00 【L'envoy é du Dieu du vent】
Les types anonymes offrent un moyen pratique,Peut être utilisé pour encapsuler un ensemble d'attributs en lecture seule dans un seul objet,Sans d'abord définir explicitement un type. Nom de type généré par le compilateur,Et ne peut pas être utilisé au niveau de la source. Le type de chaque propriété est déduit par le compilateur.
Peut être utilisé en combinaison new Opérateur et initialisateur d'objet créer un type anonyme. Plus d'informations sur les initialisateurs d'objets,Voir les initialisateurs d'objets et de collections.
L'exemple suivant montre l'utilisation de deux noms Amount Et Message Type anonyme d'initialisation de la propriété pour.
var v = new {
Amount = 108, Message = "Hello" };
// Rest the mouse pointer over v.Amount and v.Message in the following
// statement to verify that their inferred types are int and string.
Console.WriteLine(v.Amount + v.Message);
Les types anonymes sont généralement utilisés dans les expressions de requête select Dans la clause,Pour retourner un sous - ensemble d'attributs pour chaque objet de la séquence source. En savoir plus sur les requêtes,VoirC# Dans LINQ.
Le type anonyme contient un ou plusieurs attributs publics en lecture seule. Contient d'autres types de membres de classe ( Comme une méthode ou un événement )Est invalide. L'expression utilisée pour initialiser la propriété ne peut pas être null、 Fonction anonyme ou type de pointeur .
Le scénario le plus courant est d'initialiser les types anonymes avec d'autres types de propriétés . Dans l'exemple suivant,Supposons que le nom soit Product La classe existe . Catégorie Product Y compris: Color Et Price Propriétés, Et d'autres attributs qui ne vous intéressent pas . Variables Productproducts - Oui. Collection d'objets. Déclaration de type anonyme à new Début du mot - clé. La déclaration est initialisée en utilisant seulement Product Nouveau type de deux propriétés pour . L'utilisation d'un type anonyme réduit la quantité de données retournées dans la requête .
Si vous ne spécifiez pas le nom du membre dans le type anonyme , Le compilateur assigne aux membres de type anonyme le même nom que les propriétés utilisées pour initialiser ces membres . Vous devez fournir un nom pour la propriété qui est initialisée à l'aide d'une expression ,Comme le montre l'exemple ci - dessous. Dans l'exemple suivant, Les noms de propriétés des types anonymes sont tous PriceColor Et .
var productQuery =
from prod in products
select new {
prod.Color, prod.Price };
foreach (var v in productQuery)
{
Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}
En général, Lors de l'initialisation d'une variable avec un type anonyme ,Peut être réalisé en utilisant var Déclarez les variables comme des variables locales implicitement dactylographiées . Le nom de type ne peut pas être donné dans la Déclaration de variable , Parce que seul le compilateur peut accéder au nom sous - jacent du type anonyme . Concernant var Détails de,Voirvar.
Vous pouvez créer un tableau d'éléments dactylographiés anonymement en combinant une variable locale implicitement dactylographiée avec un tableau implicitement dactylographié ,Comme le montre l'exemple ci - dessous.
var anonArray = new[] {
new {
name = "apple", diam = 4 }, new {
name = "grape", diam = 1 }};
Le type anonyme est class Type, Ils dérivent directement de object, Et ne peut pas être forcé à diviser object Tout type à l'extérieur . Bien que votre application ne puisse pas y accéder , Le compilateur fournit toujours le nom de chaque type anonyme . Du point de vue de l'exécution en langage commun , Le type anonyme n'est pas différent de tout autre type de référence .
Si deux initialisateurs d'objets anonymes ou plus dans l'assemblage spécifient une séquence d'attributs , Ces attributs sont dans le même ordre et ont le même nom et le même type , Le compilateur considère l'objet comme une instance du même type . Ils partagent les informations de type générées par le même compilateur .
Les types anonymes supportent l'adoption de with Expression Modification non destructive de la forme . Cela vous permet de créer de nouvelles instances de type anonyme , Une ou plusieurs des propriétés ont de nouvelles valeurs :
var apple = new {
Item = "apples", Price = 1.35 };
var onSale = apple with {
Price = 0.79 };
Console.WriteLine(apple);
Console.WriteLine(onSale);
Impossible de placer le champ 、Propriétés、 Le type de retour pour le temps ou la méthode est déclaré comme ayant un type anonyme . Encore une fois, Vous ne pouvez pas mettre la méthode 、Propriétés、 Les paramètres du constructeur ou de l'indexeur sont déclarés comme ayant un type anonyme . Pour passer un type anonyme ou une collection contenant un type anonyme comme argument à une méthode, Les paramètres peuvent être de type object Faire une déclaration. Mais, Pour les types anonymes object Contrairement à l'objectif du type fort . Si les résultats de la requête doivent être stockés ou transmis à l'extérieur des limites de la méthode , Envisagez d'utiliser une structure ou une classe nommée normale au lieu d'un type anonyme .
En raison de Equals Et GetHashCode La méthode est basée sur les propriétés de la méthode Equals Et GetHashCode Défini, Donc seulement si toutes les propriétés des deux instances du même type anonyme sont égales , Ces deux exemples sont égaux .
版权声明
本文为[L'envoy é du Dieu du vent]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230758281298.html
边栏推荐
- The simple problem of leetcode is to calculate the numerical sum of strings
- LINQ学习系列-----1.4 匿名对象
- Large amount of data submitted by form post
- SYS_ CONNECT_ BY_ Path (column, 'char') combined with start with connect by prior
- 5.6 综合案例-RTU-
- 获取TrustedInstaller权限
- Qtablewidget header customization and beautification developed by pyqt5 (with source code download)
- Transformer XL: attention language modelsbbeyond a fixed length context paper summary
- 二维01背包
- Vowel substring in statistical string of leetcode simple problem
猜你喜欢

Ansible Automation Operation and Maintenance details (ⅰ) Installation and Deployment, Parameter use, list Management, Profile Parameters and user level ansible operating environment Construction

5.6 comprehensive case - RTU-

Qt编译QtXlsx库

5.6 综合案例-RTU-

项目上传部分

ELK生产实践

One click cleanup of pycharm and jupyter cache files under the project

Rotation function of leetcode medium problem

信息收集相关知识点及题解

Shell脚本进阶
随机推荐
QFileDialog 选择多个文件或文件夹
ajax防止缓存方法
clang 如何产生汇编文件
MySQL数据库中delete、truncate、drop原理详解
JS converts tree structure data into one-dimensional array data
总线结构概述
Using qlst excel file
Talk about the basic but not simple stock data
freertos学习02-队列 stream buffer message buffer
5.6 综合案例-RTU-
form中enctype属性
QT compilation qtxlsx Library
pdf加水印
input元素添加监听事件
Overview of bus structure
分组背包呀
如何保护开源项目免遭供应链攻击-安全设计(1)
Transformer XL: attention language modelsbbeyond a fixed length context paper summary
让地球少些“碳”息 度能在路上
信息收集相关知识点及题解