当前位置:网站首页>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
边栏推荐
猜你喜欢
Search the complete navigation program source code
stm32以及freertos 堆栈解析
作文以记之 ~ 二叉树的前序遍历
Transformer XL: attention language modelsbbeyond a fixed length context paper summary
Idea: export Yapi interface using easyyapi plug-in
A simple theme of Typecho with beautiful appearance_ Scarfskin source code download
ATSS(CVPR2020)
Goland 调试go使用-大白记录
LeetCode-199-二叉树的右视图
LeetCode簡單題之計算字符串的數字和
随机推荐
Qt利用QtXlsx操作excel文件
RPC procedure
Introduction to protobuf
万物互联下如何对设备进行加密
What is RPC
队列(c语言/链表)
Description of the abnormity that the key frame is getting closer and closer in the operation of orb slam
[C语言] 文件操作《一》
redis主从服务器问题
Situational leaders - Chapter 7, solving performance problems
Somme numérique de la chaîne de calcul pour un problème simple de leetcode
Let the earth have less "carbon" and rest on the road
Input / output system
获取TrustedInstaller权限
2022.4.11-4.17 AI行业周刊(第93期):AI行业的困局
There are some problems when using numeric type to query string type fields in MySQL
'恶霸' Oracle 又放大招,各大企业连夜删除 JDK。。。
The annotation is self-defined by implementing the parameter parser handlermethodargumentresolver interface
Ear acupoint diagnosis and treatment essay 0421
Enctype attribute in form