Search Results

Search found 6082 results on 244 pages for 'john son'.

Page 104/244 | < Previous Page | 100 101 102 103 104 105 106 107 108 109 110 111  | Next Page >

  • Microsoft sort Virtual Machine Converter, un outil gratuit pour convertir les machines virtuelles vSphere vers Hyper-V

    Microsoft lorgne les clients de VMware et sort Virtual Machine Converter un outil gratuit pour convertir les machines virtuelles vSphere vers Hyper-V Microsoft lorgne les clients de VMware, en facilitant le processus de migration des environnements de virtualisation de la société vers Hyper-V. La firme vient de publier un outil gratuit qui permet de convertir des machines virtuelles qui s'exécutent sur les produits VMware en un format pouvant s'exécuter dans son environnement de virtualisation Hyper-V. Microsoft Virtual Machine Converter (MVMC) convertit les machines virtuelles créées avec l'outil de virtualisation vSphere 4.1 et 5.0, qui peuvent s'exécuter sur Windows Serv...

    Read the article

  • Les outils de développement Google Chrome s'enrichissent d'un émulateur des terminaux mobiles et de plusieurs autres fonctions

    Les outils de développement Google Chrome s'enrichissent d'un émulateur des terminaux mobiles et de plusieurs autres fonctions expérimentales Google a procédé à une mise à jour des outils de développement de son navigateur Chrome. La fonction vedette de cette nouvelle version est l'intégration d'un émulateur, qui permettra aux développeurs de tester des applications Web sur différents navigateurs mobiles à travers une multitude de dispositifs. Grâce à cette fonctionnalité, les développeurs pourront tester leur application et déboguer celle-ci dans un environnement virtuel, proche de celui des différents terminaux ciblés, à l'instar de la Galaxy Nexus ou encore l'iPhone.

    Read the article

  • Microsoft dote Windows Phone 8.1 d'un gestionnaire de fichiers, "Files" disponible en téléchargement sur le store Windows Phone

    Microsoft lance Files pour Windows Phone 8.1 le gestionnaire de fichiers de l'OS mobile« Chose promise, chose due ». Microsoft avait annoncé en début du mois dernier des travaux sur un gestionnaire de fichiers pour les utilisateurs de son système d'exploitation Windows Phone 8.1. Celui-ci est désormais accessible.Disponible en téléchargement comme une application autonome sur le store Windows Phone, la solution ajoute à l'OS les fonctionnalités traditionnelles d'un gestionnaire de fichiers que...

    Read the article

  • Windows 7 a-t-il déjà dépassé Vista ? C'est le cas sur Développez, une étude affirme que dans les en

    Mise à jour du 05/05/10 NB : Les commentaires sur cette mise à jour commencent ici dans le topic Windows 7 a-t-il déjà dépassé Vista ? C'est le cas sur Développez, une étude affirme que dans les entreprises aussi Les études se suivent et ne se ressemblent pas. En tout cas pour les chiffres bruts. Il n'en reste pas moins qu'un constat s'impose : Windows 7 est un succès, notamment en entreprise où il est sur le point de dépasser son prédécesseur. Il vrai également que Vista n'avait pas...

    Read the article

  • Cours vidéo Python pour débutants par Pythonnerie, mise à jour du cours et deux nouvelles vidéos sur les bases de données

    voici un tutoriel, destiné à des débutants en informatique, utilise la vidéo pour aider à visualiser les concepts.Cours vidéo Python pour débutantsCe tutoriel est un travail en cours, qui sera (doucement) enrichi et complété au fil du temps. Bien entendu, il n'a aucune prétention à remplacer la documentation de référence, qu'il espère simplement rendre indirectement plus accessible. Mais son auteur espère avoir confirmé le goût de l'informatique chez ceux qui l'avaient déjà et montré aux autres que la programmation n'est pas forcément rébarbative ni mystérieuse....

    Read the article

  • Mise à jour du cours vidéo Python pour débutants par Pythonnerie, trois nouvelles vidéos sur les bases de données

    voici un tutoriel, destiné à des débutants en informatique, utilise la vidéo pour aider à visualiser les concepts.Cours vidéo Python pour débutantsCe tutoriel est un travail en cours, qui sera (doucement) enrichi et complété au fil du temps. Bien entendu, il n'a aucune prétention à remplacer la documentation de référence, qu'il espère simplement rendre indirectement plus accessible. Mais son auteur espère avoir confirmé le goût de l'informatique chez ceux qui l'avaient déjà et montré aux autres que la programmation n'est pas forcément rébarbative ni mystérieuse....

    Read the article

  • Projet Tango : après les smartphones capables de capturer des images en 3D, Google plancherait cette fois-ci sur les tablettes

    Projet Tango : après les smartphones capables de capturer des images en 3D, Google plancherait cette fois-ci sur les tablettes Après avoir dévoilé son projet Tango, qui prévoit des smartphones disposant de capteurs 3D capables de récréer l'environnement dans lequel l'utilisateur se trouve en 3D sur l'écran, Google devrait produire un nombre restreint de tablettes dotées d'un écran de 7 pouces elles aussi capables de capturer des images en 3D. Les tablettes seraient équipées de deux caméras orientées...

    Read the article

  • Ramda : une bibliothèque pour faire de la programmation fonctionnelle avec JavaScript, open source, elle inclut la curryfication automatique

    Ramda : une bibliothèque pour faire de la programmation fonctionnelle avec JavaScript Disponible en open source, elle inclut la curryfication automatique Les langages fonctionnels auraient-ils le vent en poupe ? C'est peut être le cas et certains développeurs repensent leurs applications à l'image d'IMVU qui a réécrit une partie du back-end de son application en langage Haskell, d'autres encore penchent pour le développement de bibliothèques dédiées à la programmation fonctionnelle en se basant...

    Read the article

  • Lancement de CodeFluent Entities pour les applis Windows 8, l'éditeur graphique intégré à Visual Studio inclut un générateur prêt à l'emploi

    CodeFluent Entities : le générateur de code disponible en version gratuite prend déjà en charge Visual Studio 2012 Visual Studio 2012 est accessible au grand public depuis seulement quelques heures, que CodeFluent Entities et son éditeur graphique intégré à Visual Studio prend d'ores et déjà en charge celui-ci et intègre le thème graphique Windows 8. [IMG]http://ftp-developpez.com/gordon-fowler/Softfluent%202012.png[/IMG] CodeFluent Entities est une fabrique logicielle qui permet de générer des composants tels que des scripts (T-SQL, PL/SQL), du code (C# et VB.NET), des se...

    Read the article

  • Microsoft donne un accès gratuit à Office 365 aux élèves à condition que les enseignants aient tous une licence

    Microsoft donne un accès gratuit à Office 365 aux élèves à condition que les enseignants aient tous une licence Lors de la conférence Educause 2013, Microsoft a annoncé le lancement d'un nouveau programme, Student Advantage, qui permettrait aux élèves d'avoir accès gratuitement à Office 365 à condition que leur scolarité soit totalement réglée. Ainsi, dès le 1er décembre, toute institution académique disposant de licences Office 365 ProPlus ou Office Professionnel Plus pour tout son corps...

    Read the article

  • Microsoft publie discrètement les préversions de Windows Server 2012 R2, SQL Server 2014 et System Center 2012 R2

    Microsoft publie discrètement les préversions de Windows Server 2012 R2 SQL Server 2014 et System Center 2012 R2À quelques heures de la conférence Build (qui débutera demain 26 juin), la grande messe annuelle des développeurs de Microsoft, la firme a discrètement publié les préversions de Windows Server 2012 R2 et SQL Server 2014.Les abonnés au programme MSDN (Microsoft Developer Network) et Technet peuvent télécharger la Preview de Windows Server 2012 R2, System Center 2012 R2 et la Community Technology Preview (CTP) de SQL Server 2014. L'information a été divulguée par plusieurs développeurs sur leur page Twitter.Windows Server 2012 R2 renforce la vision « Cloud OS » introduite par son prédéces...

    Read the article

  • USA : Glassdoor dévoile les 25 entreprises technologiques qui paient le plus leurs ingénieurs logiciels, Google et Facebook éjectés du top 3

    USA : Glassdoor dévoile les 25 entreprises technologiques qui paient le plus leurs ingénieurs logiciels, Google et Facebook éjectés du top 3 Glassdoor a présenté son traditionnel résultat d'enquête sur les 25 entreprises qui ont le plus payé leurs ingénieurs logiciels l'année dernière. Bien que figurant parmi les dix premiers, ni Google, ni Facebook, ni même Apple ne font partie du trio de tête. Il faut noter que toutes ces 25 entreprises ont payé leurs ingénieurs logiciel au dessus de la...

    Read the article

  • « Windows Phone Marketplace » devient « Windows Phone Store » alors que le site de Windows Phone s'offre une nouvelle jeunesse

    Le site Windows Phone s'offre une nouvelle jeunesse ainsi que le Marketplace qui devient Store La sortie de Windows Phone 8, la prochaine mise à jour majeure du système d'exploitation mobile de Microsoft, est proche. Pour cela, le chemin doit être préparé pour son accueil : les premiers modèles de smartphones de Nokia sous l'OS ont déjà été présentés ; le Dev Center, l'interface de gestion des applications pour les développeurs, a été mis à jour ; la Preview du SDK de Windows Phone 8 a é...

    Read the article

  • Les menaces mobiles augmentent de 614 % entre 2012 et 2013, les entreprises sont de plus en plus exposées

    Les menaces mobiles augmentent de 614 % entre 2012 et 2013, les entreprises sont de plus en plus exposéesLe troisième rapport annuel publié sur les menaces mobiles par Juniper Networks, une société américaine spécialiste en équipement de télécommunications, fait état d'une croissance exponentielle des logiciels malveillants sur mobile. Un bond de 614 % entre mars 2012 et mars 2013 selon son MTC (Mobile Threat Center) soit un passage de 38 689 à 276 259 en nombre de logiciels malveillants. Sans grande surprise, les hackers concentrent leurs attaques sur Android qui est la plateforme la plus ...

    Read the article

  • Firefox 30 sort en version stable et désactive par défaut l'exécution des plugins, la version Android également disponible

    Firefox 30 sort en version stable et désactive par défaut l'exécution des plugins, la version Android également disponibleMozilla met à la disposition des utilisateurs, une nouvelle version de son navigateur Firefox. Contrairement à la version 29 qui était sortie avec un lot de nouveautés, notamment sa nouvelle interface utilisateur Australis, Firefox 30 représente une mise à jour mineure.Tout comme Google avec Chrome, Mozilla prend également des distances avec les plugins qui représentent (ceux...

    Read the article

  • Samsung crée F2FS, un nouveau système de fichiers open source pour mémoire Flash qui sera intégré au noyau Linux

    Samsung crée F2FS son nouveau système de fichiers open source pour mémoire flash qui sera intégré au noyau Linux Samsung a mis au point un nouveau système de fichiers destiné aux supports de stockage flash. Les systèmes de fichiers anciens qui sont actuellement utilisés pour le stockage sur les mémoires flash NAND très répandues sur les terminaux mobiles présentent des limites assez importantes. Certains constructeurs de smartphones comme RIM ou encore Sharp ont été obligés de se tourner vers le système de fichiers propriétaire Extended File Allocation Table (exFAT) de Microsoft contre payement de redevances.

    Read the article

  • WWDC : Apple présente OS X 10.10 avec un nouveau design et plusieurs nouveautés, Yosemite fait un pas de plus dans le rapprochement avec iOS

    WWDC : Apple dévoile OS X 10.10 avec un nouveau design et plusieurs nouveautés Yosemite fait un pas de plus dans le rapprochement avec iOSOS X aura également droit à une mise jour. À la suite d'iOS 8, Apple a présenté la prochaine version de son système d'exploitation pour les ordinateurs Mac.Baptisé « Yosemite », OS X 10.10 introduit une nouvelle interface utilisateur, une intégration plus poussée avec les dispositifs sous iOS, mais également un lot de nouvelles fonctionnalités pour offrir un...

    Read the article

  • Un quart de milliard de smartphones vendus au troisième trimestre, Android et iOS peinent à gagner des parts pendant que Windows Phone progresse

    Un quart de milliard de smartphones vendus au troisième trimestre, Android et iOS peinent à gagner des parts pendant que Windows Phone progresse Les rapports de vente de smartphones au troisième trimestre de l'année en cours se multiplient. Cette fois-ci, c'est l'entreprise indépendante d'analyse Canalys qui révèle à son tour une augmentation annuelle de 44% du marché. Cette proportion représente un quart de milliards de dispositifs écoulés en un trimestre sur la planète. Sans surprise,...

    Read the article

  • Google : vers plus de reconnaissance faciale et de réalité augmentée, Motorola vient de racheter la société spécialisée Viewdle

    Google va ajouter plus de reconnaissance faciale et de réalité augmentée à ses produits Motorola rachète la société spécialisée Viewdle Google, via sa filiale Motorola, vient de racheter une société d'origine Ukrainienne baptisée Viewdle. Basé aujourd'hui en Californie, Viewdle est spécialisée « dans la réalité augmentée et la reconnaissance faciale ». [IMG]http://ftp-developpez.com/gordon-fowler/Viewdle%20Google%20Motorola/Viewdle%20Google%20Motorola%201.jpg[/IMG] Sur le même modèle que Face.com acquis par Facebook, son produit phare reconnait et tague automatiquement les visages sur les photos avant de les uploader sur Facebook.

    Read the article

  • Les Bouches-du-Rhône sponsorisent des développeurs pour promouvoir l'open data : avez-vous proposé votre application ?

    Les Bouches-du-Rhône lancent une opération de sponsoring pour les développeurs d'applications et de sites web Afin de promouvoir l'open-data et la région, Developpez.com partenaire Depuis le mois d'avril, l'association Bouches-du-Rhône Tourisme a rejoint la démarche Open-data en ouvrant son portail et en libérant une centaine de jeux de données liées au tourisme dans le département. Toutes les informations détenues par l'association ont été rendues disponibles et exploitables par les développeurs, les scientifiques, les associations, les étudiants et les entreprises. Bref, par tout le monde. On y trouve par exemple...

    Read the article

  • Les Bouches-du-Rhône lancent une opération de sponsoring de développeurs pour promouvoir l'open-data et la région

    Les Bouches-du-Rhône lancent une opération de sponsoring pour les développeurs d'applications et de sites web Afin de promouvoir l'open-data et la région, Developpez.com partenaire Depuis le mois d'avril, l'association Bouches-du-Rhône Tourisme a rejoint la démarche Open-data en ouvrant son portail et en libérant une centaine de jeux de données liées au tourisme dans le département. Toutes les informations détenues par l'association ont été rendues disponibles et exploitables par les développeurs, les scientifiques, les associations, les étudiants et les entreprises. Bref, par tout le monde. On y trouve par...

    Read the article

  • HackerOne : le programme qui récompense les hackers, Microsoft et Facebook s'engagent pour consolider la sécurité du Web

    Microsoft et Facebook sont les sponsors du programme HackerOne. Le programme HackerOne a pour but de récompenser ceux qui rapportent des failles de sécurité dans plusieurs domaines. De nombreux langages (PHP, Perl, Python, Ruby, etc.) et même certains protocoles de communication (SSL, DNS, etc.) sont contenus dans ce programme.HackerOne promet des dotations de 300 à 5000 dollars en fonction de la vulnérabilité concernée et son degré de criticité. Un jury d'expert vérifieront les propositions de...

    Read the article

  • Silverlight Tree View with Multiple Levels

    - by psheriff
    There are many examples of the Silverlight Tree View that you will find on the web, however, most of them only show you how to go to two levels. What if you have more than two levels? This is where understanding exactly how the Hierarchical Data Templates works is vital. In this blog post, I am going to break down how these templates work so you can really understand what is going on underneath the hood. To start, let’s look at the typical two-level Silverlight Tree View that has been hard coded with the values shown below: <sdk:TreeView>  <sdk:TreeViewItem Header="Managers">    <TextBlock Text="Michael" />    <TextBlock Text="Paul" />  </sdk:TreeViewItem>  <sdk:TreeViewItem Header="Supervisors">    <TextBlock Text="John" />    <TextBlock Text="Tim" />    <TextBlock Text="David" />  </sdk:TreeViewItem></sdk:TreeView> Figure 1 shows you how this tree view looks when you run the Silverlight application. Figure 1: A hard-coded, two level Tree View. Next, let’s create three classes to mimic the hard-coded Tree View shown above. First, you need an Employee class and an EmployeeType class. The Employee class simply has one property called Name. The constructor is created to accept a “name” argument that you can use to set the Name property when you create an Employee object. public class Employee{  public Employee(string name)  {    Name = name;  }   public string Name { get; set; }} Finally you create an EmployeeType class. This class has one property called EmpType and contains a generic List<> collection of Employee objects. The property that holds the collection is called Employees. public class EmployeeType{  public EmployeeType(string empType)  {    EmpType = empType;    Employees = new List<Employee>();  }   public string EmpType { get; set; }  public List<Employee> Employees { get; set; }} Finally we have a collection class called EmployeeTypes created using the generic List<> class. It is in the constructor for this class where you will build the collection of EmployeeTypes and fill it with Employee objects: public class EmployeeTypes : List<EmployeeType>{  public EmployeeTypes()  {    EmployeeType type;            type = new EmployeeType("Manager");    type.Employees.Add(new Employee("Michael"));    type.Employees.Add(new Employee("Paul"));    this.Add(type);     type = new EmployeeType("Project Managers");    type.Employees.Add(new Employee("Tim"));    type.Employees.Add(new Employee("John"));    type.Employees.Add(new Employee("David"));    this.Add(type);  }} You now have a data hierarchy in memory (Figure 2) which is what the Tree View control expects to receive as its data source. Figure 2: A hierachial data structure of Employee Types containing a collection of Employee objects. To connect up this hierarchy of data to your Tree View you create an instance of the EmployeeTypes class in XAML as shown in line 13 of Figure 3. The key assigned to this object is “empTypes”. This key is used as the source of data to the entire Tree View by setting the ItemsSource property as shown in Figure 3, Callout #1. Figure 3: You need to start from the bottom up when laying out your templates for a Tree View. The ItemsSource property of the Tree View control is used as the data source in the Hierarchical Data Template with the key of employeeTypeTemplate. In this case there is only one Hierarchical Data Template, so any data you wish to display within that template comes from the collection of Employee Types. The TextBlock control in line 20 uses the EmpType property of the EmployeeType class. You specify the name of the Hierarchical Data Template to use in the ItemTemplate property of the Tree View (Callout #2). For the second (and last) level of the Tree View control you use a normal <DataTemplate> with the name of employeeTemplate (line 14). The Hierarchical Data Template in lines 17-21 sets its ItemTemplate property to the key name of employeeTemplate (Line 19 connects to Line 14). The source of the data for the <DataTemplate> needs to be a property of the EmployeeTypes collection used in the Hierarchical Data Template. In this case that is the Employees property. In the Employees property there is a “Name” property of the Employee class that is used to display the employee name in the second level of the Tree View (Line 15). What is important here is that your lowest level in your Tree View is expressed in a <DataTemplate> and should be listed first in your Resources section. The next level up in your Tree View should be a <HierarchicalDataTemplate> which has its ItemTemplate property set to the key name of the <DataTemplate> and the ItemsSource property set to the data you wish to display in the <DataTemplate>. The Tree View control should have its ItemsSource property set to the data you wish to display in the <HierarchicalDataTemplate> and its ItemTemplate property set to the key name of the <HierarchicalDataTemplate> object. It is in this way that you get the Tree View to display all levels of your hierarchical data structure. Three Levels in a Tree View Now let’s expand upon this concept and use three levels in our Tree View (Figure 4). This Tree View shows that you now have EmployeeTypes at the top of the tree, followed by a small set of employees that themselves manage employees. This means that the EmployeeType class has a collection of Employee objects. Each Employee class has a collection of Employee objects as well. Figure 4: When using 3 levels in your TreeView you will have 2 Hierarchical Data Templates and 1 Data Template. The EmployeeType class has not changed at all from our previous example. However, the Employee class now has one additional property as shown below: public class Employee{  public Employee(string name)  {    Name = name;    ManagedEmployees = new List<Employee>();  }   public string Name { get; set; }  public List<Employee> ManagedEmployees { get; set; }} The next thing that changes in our code is the EmployeeTypes class. The constructor now needs additional code to create a list of managed employees. Below is the new code. public class EmployeeTypes : List<EmployeeType>{  public EmployeeTypes()  {    EmployeeType type;    Employee emp;    Employee managed;     type = new EmployeeType("Manager");    emp = new Employee("Michael");    managed = new Employee("John");    emp.ManagedEmployees.Add(managed);    managed = new Employee("Tim");    emp.ManagedEmployees.Add(managed);    type.Employees.Add(emp);     emp = new Employee("Paul");    managed = new Employee("Michael");    emp.ManagedEmployees.Add(managed);    managed = new Employee("Sara");    emp.ManagedEmployees.Add(managed);    type.Employees.Add(emp);    this.Add(type);     type = new EmployeeType("Project Managers");    type.Employees.Add(new Employee("Tim"));    type.Employees.Add(new Employee("John"));    type.Employees.Add(new Employee("David"));    this.Add(type);  }} Now that you have all of the data built in your classes, you are now ready to hook up this three-level structure to your Tree View. Figure 5 shows the complete XAML needed to hook up your three-level Tree View. You can see in the XAML that there are now two Hierarchical Data Templates and one Data Template. Again you list the Data Template first since that is the lowest level in your Tree View. The next Hierarchical Data Template listed is the next level up from the lowest level, and finally you have a Hierarchical Data Template for the first level in your tree. You need to work your way from the bottom up when creating your Tree View hierarchy. XAML is processed from the top down, so if you attempt to reference a XAML key name that is below where you are referencing it from, you will get a runtime error. Figure 5: For three levels in a Tree View you will need two Hierarchical Data Templates and one Data Template. Each Hierarchical Data Template uses the previous template as its ItemTemplate. The ItemsSource of each Hierarchical Data Template is used to feed the data to the previous template. This is probably the most confusing part about working with the Tree View control. You are expecting the content of the current Hierarchical Data Template to use the properties set in the ItemsSource property of that template. But you need to look to the template lower down in the XAML to see the source of the data as shown in Figure 6. Figure 6: The properties you use within the Content of a template come from the ItemsSource of the next template in the resources section. Summary Understanding how to put together your hierarchy in a Tree View is simple once you understand that you need to work from the bottom up. Start with the bottom node in your Tree View and determine what that will look like and where the data will come from. You then build the next Hierarchical Data Template to feed the data to the previous template you created. You keep doing this for each level in your Tree View until you get to the last level. The data for that last Hierarchical Data Template comes from the ItemsSource in the Tree View itself. NOTE: You can download the sample code for this article by visiting my website at http://www.pdsa.com/downloads. Select “Tips & Tricks”, then select “Silverlight TreeView with Multiple Levels” from the drop down list.

    Read the article

  • C#/.NET Little Wonders: The Joy of Anonymous Types

    - by James Michael Hare
    Once again, in this series of posts I look at the parts of the .NET Framework that may seem trivial, but can help improve your code by making it easier to write and maintain. The index of all my past little wonders posts can be found here. In the .NET 3 Framework, Microsoft introduced the concept of anonymous types, which provide a way to create a quick, compiler-generated types at the point of instantiation.  These may seem trivial, but are very handy for concisely creating lightweight, strongly-typed objects containing only read-only properties that can be used within a given scope. Creating an Anonymous Type In short, an anonymous type is a reference type that derives directly from object and is defined by its set of properties base on their names, number, types, and order given at initialization.  In addition to just holding these properties, it is also given appropriate overridden implementations for Equals() and GetHashCode() that take into account all of the properties to correctly perform property comparisons and hashing.  Also overridden is an implementation of ToString() which makes it easy to display the contents of an anonymous type instance in a fairly concise manner. To construct an anonymous type instance, you use basically the same initialization syntax as with a regular type.  So, for example, if we wanted to create an anonymous type to represent a particular point, we could do this: 1: var point = new { X = 13, Y = 7 }; Note the similarity between anonymous type initialization and regular initialization.  The main difference is that the compiler generates the type name and the properties (as readonly) based on the names and order provided, and inferring their types from the expressions they are assigned to. It is key to remember that all of those factors (number, names, types, order of properties) determine the anonymous type.  This is important, because while these two instances share the same anonymous type: 1: // same names, types, and order 2: var point1 = new { X = 13, Y = 7 }; 3: var point2 = new { X = 5, Y = 0 }; These similar ones do not: 1: var point3 = new { Y = 3, X = 5 }; // different order 2: var point4 = new { X = 3, Y = 5.0 }; // different type for Y 3: var point5 = new {MyX = 3, MyY = 5 }; // different names 4: var point6 = new { X = 1, Y = 2, Z = 3 }; // different count Limitations on Property Initialization Expressions The expression for a property in an anonymous type initialization cannot be null (though it can evaluate to null) or an anonymous function.  For example, the following are illegal: 1: // Null can't be used directly. Null reference of what type? 2: var cantUseNull = new { Value = null }; 3:  4: // Anonymous methods cannot be used. 5: var cantUseAnonymousFxn = new { Value = () => Console.WriteLine(“Can’t.”) }; Note that the restriction on null is just that you can’t use it directly as the expression, because otherwise how would it be able to determine the type?  You can, however, use it indirectly assigning a null expression such as a typed variable with the value null, or by casting null to a specific type: 1: string str = null; 2: var fineIndirectly = new { Value = str }; 3: var fineCast = new { Value = (string)null }; All of the examples above name the properties explicitly, but you can also implicitly name properties if they are being set from a property, field, or variable.  In these cases, when a field, property, or variable is used alone, and you don’t specify a property name assigned to it, the new property will have the same name.  For example: 1: int variable = 42; 2:  3: // creates two properties named varriable and Now 4: var implicitProperties = new { variable, DateTime.Now }; Is the same type as: 1: var explicitProperties = new { variable = variable, Now = DateTime.Now }; But this only works if you are using an existing field, variable, or property directly as the expression.  If you use a more complex expression then the name cannot be inferred: 1: // can't infer the name variable from variable * 2, must name explicitly 2: var wontWork = new { variable * 2, DateTime.Now }; In the example above, since we typed variable * 2, it is no longer just a variable and thus we would have to assign the property a name explicitly. ToString() on Anonymous Types One of the more trivial overrides that an anonymous type provides you is a ToString() method that prints the value of the anonymous type instance in much the same format as it was initialized (except actual values instead of expressions as appropriate of course). For example, if you had: 1: var point = new { X = 13, Y = 42 }; And then print it out: 1: Console.WriteLine(point.ToString()); You will get: 1: { X = 13, Y = 42 } While this isn’t necessarily the most stunning feature of anonymous types, it can be handy for debugging or logging values in a fairly easy to read format. Comparing Anonymous Type Instances Because anonymous types automatically create appropriate overrides of Equals() and GetHashCode() based on the underlying properties, we can reliably compare two instances or get hash codes.  For example, if we had the following 3 points: 1: var point1 = new { X = 1, Y = 2 }; 2: var point2 = new { X = 1, Y = 2 }; 3: var point3 = new { Y = 2, X = 1 }; If we compare point1 and point2 we’ll see that Equals() returns true because they overridden version of Equals() sees that the types are the same (same number, names, types, and order of properties) and that the values are the same.   In addition, because all equal objects should have the same hash code, we’ll see that the hash codes evaluate to the same as well: 1: // true, same type, same values 2: Console.WriteLine(point1.Equals(point2)); 3:  4: // true, equal anonymous type instances always have same hash code 5: Console.WriteLine(point1.GetHashCode() == point2.GetHashCode()); However, if we compare point2 and point3 we get false.  Even though the names, types, and values of the properties are the same, the order is not, thus they are two different types and cannot be compared (and thus return false).  And, since they are not equal objects (even though they have the same value) there is a good chance their hash codes are different as well (though not guaranteed): 1: // false, different types 2: Console.WriteLine(point2.Equals(point3)); 3:  4: // quite possibly false (was false on my machine) 5: Console.WriteLine(point2.GetHashCode() == point3.GetHashCode()); Using Anonymous Types Now that we’ve created instances of anonymous types, let’s actually use them.  The property names (whether implicit or explicit) are used to access the individual properties of the anonymous type.  The main thing, once again, to keep in mind is that the properties are readonly, so you cannot assign the properties a new value (note: this does not mean that instances referred to by a property are immutable – for more information check out C#/.NET Fundamentals: Returning Data Immutably in a Mutable World). Thus, if we have the following anonymous type instance: 1: var point = new { X = 13, Y = 42 }; We can get the properties as you’d expect: 1: Console.WriteLine(“The point is: ({0},{1})”, point.X, point.Y); But we cannot alter the property values: 1: // compiler error, properties are readonly 2: point.X = 99; Further, since the anonymous type name is only known by the compiler, there is no easy way to pass anonymous type instances outside of a given scope.  The only real choices are to pass them as object or dynamic.  But really that is not the intention of using anonymous types.  If you find yourself needing to pass an anonymous type outside of a given scope, you should really consider making a POCO (Plain Old CLR Type – i.e. a class that contains just properties to hold data with little/no business logic) instead. Given that, why use them at all?  Couldn’t you always just create a POCO to represent every anonymous type you needed?  Sure you could, but then you might litter your solution with many small POCO classes that have very localized uses. It turns out this is the key to when to use anonymous types to your advantage: when you just need a lightweight type in a local context to store intermediate results, consider an anonymous type – but when that result is more long-lived and used outside of the current scope, consider a POCO instead. So what do we mean by intermediate results in a local context?  Well, a classic example would be filtering down results from a LINQ expression.  For example, let’s say we had a List<Transaction>, where Transaction is defined something like: 1: public class Transaction 2: { 3: public string UserId { get; set; } 4: public DateTime At { get; set; } 5: public decimal Amount { get; set; } 6: // … 7: } And let’s say we had this data in our List<Transaction>: 1: var transactions = new List<Transaction> 2: { 3: new Transaction { UserId = "Jim", At = DateTime.Now, Amount = 2200.00m }, 4: new Transaction { UserId = "Jim", At = DateTime.Now, Amount = -1100.00m }, 5: new Transaction { UserId = "Jim", At = DateTime.Now.AddDays(-1), Amount = 900.00m }, 6: new Transaction { UserId = "John", At = DateTime.Now.AddDays(-2), Amount = 300.00m }, 7: new Transaction { UserId = "John", At = DateTime.Now, Amount = -10.00m }, 8: new Transaction { UserId = "Jane", At = DateTime.Now, Amount = 200.00m }, 9: new Transaction { UserId = "Jane", At = DateTime.Now, Amount = -50.00m }, 10: new Transaction { UserId = "Jaime", At = DateTime.Now.AddDays(-3), Amount = -100.00m }, 11: new Transaction { UserId = "Jaime", At = DateTime.Now.AddDays(-3), Amount = 300.00m }, 12: }; So let’s say we wanted to get the transactions for each day for each user.  That is, for each day we’d want to see the transactions each user performed.  We could do this very simply with a nice LINQ expression, without the need of creating any POCOs: 1: // group the transactions based on an anonymous type with properties UserId and Date: 2: byUserAndDay = transactions 3: .GroupBy(tx => new { tx.UserId, tx.At.Date }) 4: .OrderBy(grp => grp.Key.Date) 5: .ThenBy(grp => grp.Key.UserId); Now, those of you who have attempted to use custom classes as a grouping type before (such as GroupBy(), Distinct(), etc.) may have discovered the hard way that LINQ gets a lot of its speed by utilizing not on Equals(), but also GetHashCode() on the type you are grouping by.  Thus, when you use custom types for these purposes, you generally end up having to write custom Equals() and GetHashCode() implementations or you won’t get the results you were expecting (the default implementations of Equals() and GetHashCode() are reference equality and reference identity based respectively). As we said before, it turns out that anonymous types already do these critical overrides for you.  This makes them even more convenient to use!  Instead of creating a small POCO to handle this grouping, and then having to implement a custom Equals() and GetHashCode() every time, we can just take advantage of the fact that anonymous types automatically override these methods with appropriate implementations that take into account the values of all of the properties. Now, we can look at our results: 1: foreach (var group in byUserAndDay) 2: { 3: // the group’s Key is an instance of our anonymous type 4: Console.WriteLine("{0} on {1:MM/dd/yyyy} did:", group.Key.UserId, group.Key.Date); 5:  6: // each grouping contains a sequence of the items. 7: foreach (var tx in group) 8: { 9: Console.WriteLine("\t{0}", tx.Amount); 10: } 11: } And see: 1: Jaime on 06/18/2012 did: 2: -100.00 3: 300.00 4:  5: John on 06/19/2012 did: 6: 300.00 7:  8: Jim on 06/20/2012 did: 9: 900.00 10:  11: Jane on 06/21/2012 did: 12: 200.00 13: -50.00 14:  15: Jim on 06/21/2012 did: 16: 2200.00 17: -1100.00 18:  19: John on 06/21/2012 did: 20: -10.00 Again, sure we could have just built a POCO to do this, given it an appropriate Equals() and GetHashCode() method, but that would have bloated our code with so many extra lines and been more difficult to maintain if the properties change.  Summary Anonymous types are one of those Little Wonders of the .NET language that are perfect at exactly that time when you need a temporary type to hold a set of properties together for an intermediate result.  While they are not very useful beyond the scope in which they are defined, they are excellent in LINQ expressions as a way to create and us intermediary values for further expressions and analysis. Anonymous types are defined by the compiler based on the number, type, names, and order of properties created, and they automatically implement appropriate Equals() and GetHashCode() overrides (as well as ToString()) which makes them ideal for LINQ expressions where you need to create a set of properties to group, evaluate, etc. Technorati Tags: C#,CSharp,.NET,Little Wonders,Anonymous Types,LINQ

    Read the article

< Previous Page | 100 101 102 103 104 105 106 107 108 109 110 111  | Next Page >