2010-09-23 3 views
1

Est-il possible de créer un type anonyme de niveau classe? J'aime,Types anonymes de niveau cours?

class MyClass { 
    readonly var _myAnon = new { Prop = "Hello" }; 
} 

Je cherche un moyen facile de créer une structure de constantes de type dictionnaire.


voudrais créer quelque chose comme ça, mais avec un peu plus de sécurité-type:

readonly Dictionary<string, dynamic> _selectors = new Dictionary<string, dynamic> 
    { 
     { "order", new string[] {"ID","NAME","TAG"} }, 
     { "match", new Dictionary<string, Regex> { 
      { "ID", new Regex(@"#((?:[\w\u00c0-\uFFFF-]|\\.)+)") }, 
      { "CLASS", new Regex(@"\.((?:[\w\u00c0-\uFFFF-]|\\.)+)") }, 
      { "NAME", new Regex(@"\[name=['""]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['""]*\]") }, 
      { "ATTR", new Regex(@"\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['""]*)(.*?)\3|)\s*\]") }, 
      { "TAG", new Regex(@"^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)") }, 
      { "CHILD", new Regex(@":(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?") }, 
      { "POS", new Regex(@":(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)") }, 
      { "PSEUDO", new Regex(@":((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['""]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?") } } 
     }, 
     { "leftMatch", new object() }, 
     { "attrMap", new Dictionary<string, string> { 
      { "class", "className" }, 
      { "for", "htmlFor" } } 
     } 
    }; 

Répondre

2

Vous pouvez toujours déclarer votre propre type. Il n'a pas besoin d'être anonyme:

class MyClass 
{ 
    readonly MarkProperties _mark = new MarkProperties(); 
    public class MarkProperties 
    { 
     public string Name = "Mark"; 
     public int Age = 22; 
     public DateTime Birthdate = new DateTime(...); 
    } 
} 

Ainsi, le code que vous avez donné dans votre version modifiée de votre question deviendrait quelque chose comme:

readonly Selectors _selectors = new Selectors(); 
public class Selectors 
{ 
    public string[] Order = { "ID", "NAME", "TAG" }; 
    public Match Match = new Match(); 
    public class Match 
    { 
     public Regex ID = new Regex(@"#((?:[\w\u00c0-\uFFFF-]|\\.)+)"); 
     public Regex CLASS = new Regex(@"\.((?:[\w\u00c0-\uFFFF-]|\\.)+)"); 
     public Regex NAME = new Regex(@"\[name=['""]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['""]*\]"); 
     public Regex ATTR = new Regex(@"\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['""]*)(.*?)\3|)\s*\]"); 
     public Regex TAG = new Regex(@"^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)"); 
     public Regex CHILD = new Regex(@":(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?"); 
     public Regex POS = new Regex(@":(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)"); 
     public Regex PSEUDO = new Regex(@":((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['""]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?"); 
    } 
    public object LeftMatch = new object(); 
    public AttrMap AttrMap = new AttrMap(); 
    public class AttrMap 
    { 
     public string Class = "className"; 
     public string For = "htmlFor"; 
    } 
} 
+0

Sauf que vous avez écrit 'int'. C'est ce que je fais maintenant, mais j'utilise 'dynamic' à la place, donc je n'ai pas besoin de continuer à lancer les données. – mpen

+0

@Mark: J'ai enlevé la solution de dictionnaire et laissé seulement le type vraiment sûr. – Timwi

+0

@Mark: J'aime ceci. Tapez l'anarchie apportée à C# !!! La productivité va exploser !!!! – erikkallen