J'obtiens une erreur qui dit:
«objet» ne contient pas de définition pour «titre»
tout le code est aussi sur github
J'ai une ConsoleApplication1 qui ressemble à ceci
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title = "Ghostbusters", Rating = "PG" };
Console.WriteLine(m.PrintMovie(o));
}
}
}
et Movie.cs
public class Movie : DynamicObject
{
public string PrintMovie(dynamic o)
{
return string.Format("Title={0} Rating={1}", o.Title, o.Rating);
}
}
cela fonctionne bien à partir du même projet, mais si j'ajoute ConsoleApplication2 avec une référence à ConsoleApplication1 et ajoute le même code exact
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title = "Ghostbusters", Rating = "PG" };
Console.WriteLine(m.PrintMovie(o));
}
}
}
J'obtiens une erreur:
'objet' ne contient pas de définition pour 'titre' **
même si c'est dans l'objet dynamique.
- o.Title 'o.Title' a lancé une exception de type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' dynamic {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException}
Voici une capture d'écran:
Je fais quelque chose comme ça et j'essaie d'appeler la fonction film à partir d'un projet de test.
c#
.net
dynamic
dynamicobject
eiu165
la source
la source
Réponses:
Vous devez utiliser un ExpandoObject
la source
La réponse de Jahamal ne dit pas pourquoi vous obtenez l'erreur. La raison en est que la classe anonyme est
internal
à l'assembly. Le mot clédynamic
ne vous permet pas de contourner la visibilité des membres.La solution consiste à remplacer la classe anonyme par la classe publique nommée.
Voici un autre bon exemple expliquant la raison et une autre solution possible .
la source
dynamic
peuvent être vérifiées sur une classe de test avec des membres de visibilité variable.Dans mon cas, j'avais un projet de test unitaire que j'avais créé sur Visual Studio et de nombreux cas où j'avais besoin de tester des méthodes sur une bibliothèque de couches de données. Je ne voulais pas tous les changer, j'ai donc marqué l'assemblage de test comme un ami en utilisant:
[assembly:InternalsVisibleTo("MyDataLayerAssemblyName")]
Et cela l'a résolu.
Exemple:
Références:
la source
Dans mon cas, j'ai un projet de test xUnit.
Où 'content' est une chaîne json .
Ce code génère une erreur:
Ce code fonctionne. Utilisez ExpandoObject insted of dynamic comme ceci:
la source