Je suis dans le même bateau que vous, de faire des tas et des tas de ligne de type d'entreprise des applications, rien de "fun" comme les jeux ou les compilateurs ou les moteurs de recherche.
Votre kilométrage va varier, mais au moins dans mon expérience de beaucoup d'équipes de développement sont réticents à sauter à droite dans F# parce que personne d'autre sur l'équipe connaît ou a entendu parler de tout cela. Et dès le départ, vous avez à combattre ces questions comme "que faut-il faire différemment à partir de C#?" Si vous pouvez convaincre votre patron de vous laisser écrire quelques démo des applications avec elle, allez-y!
Donc, avec cela dit, je trouve que le C# n'est pas très bon à l'entreprise des règles, mais elle gère les Interfaces graphiques comme un champion; F#'s immutabilité rend développement du GUI maladroit, mais les règles d'affaires et des flux de travail semble naturel. De sorte que les deux langues ont leurs propres points forts et les compliments des uns et des faiblesses.
Dans mon propre MÉTIER apps, F# exécute des cercles autour de C# dans quelques domaines:
F#'s asynchrone des flux de travail et une boîte aux lettres processeurs ordres de grandeur plus facile à travailler que les threads natifs et même task parallel library. Depuis boîte aux lettres à l'aide de processeurs pour interthread la communication, je ne me souviens même plus de la dernière fois que j'ai eu pour le verrouiller ou le fil.join() de rien pour la synchronisation à tous.
En définissant les règles des moteurs et des Dsl avec les syndicats FTW! Tous les non-trivial application MÉTIER, je n'ai jamais travaillé sur a son propre demi-cuite règles de langue et interprète, et presque toujours en fonction récursive de la commutation sur un enum pour percer à travers les règles et de trouver une correspondance. Projet actuel, j'ai maintenant contient 1300+ des cours publics, 900 ou alors sont de simples classes de conteneurs pour représenter une règle. Je pense que représentent les règles comme un fa# de l'union permettrait de réduire considérablement le code de ballonnements et de faire pour un meilleur moteur.
Immuable code fonctionne tout simplement mieux - si vous obtenez un nouvel objet avec un état non valide, vous n'avez pas à chercher bien loin pour trouver la ligne de code malveillant, tout ce que vous devez savoir, c'est sur la pile d'appel. Si vous avez un objet mutable avec un état non valide, parfois, vous avez à passer beaucoup de temps de suivi vers le bas. Vous pouvez écrire immuable de code en C#, mais c'est vraiment difficile de ne pas tomber en arrière sur le changement, surtout quand vous êtes en train de modifier un objet dans une boucle.
Je déteste les valeurs null. Je ne peux pas donner une estimation exacte, mais il se sent comme la moitié de la bugs que nous obtenons dans la production sont nuls les exceptions de référence -- un objet n'est pas correctement initialisé et vous ne savez pas à ce sujet jusqu'à ce que vous êtes 30 pile d'images de profondeur dans le code. Je pense que F# nous aider à écrire plus de bug gratuit code la première fois autour.
C# fonctionne généralement bien lorsque:
Vous êtes en train de rédiger un code de GUI ou de travail avec intrinsèquement mutable systèmes.
L'exposition d'une DLL ou d'un service web pour de nombreux clients différents.
Votre patron ne vous permettront pas d'utiliser les outils que vous voulez ;)
Donc, si vous pouvez obtenir sur le "pourquoi voudrions-nous utiliser un nouveau langage obstacle", je pense que F# va en effet rendre votre vie plus facile.