Reputation: 249
I have a problem with passing an anonymous object as an argument in a method. I want to pass the object like in JavaScript. Example:
function Test(obj) {
return obj.txt;
}
console.log(Test({ txt: "test"}));
But in C#, it throws many exceptions:
class Test
{
public static string TestMethod(IEnumerable<dynamic> obj)
{
return obj.txt;
}
}
Console.WriteLine(Test.TestMethod(new { txt = "test" }));
Exceptions:
Upvotes: 18
Views: 34517
Reputation: 1782
This should do it...
class Program
{
static void Main(string[] args)
{
var test = new { Text = "test", Slab = "slab"};
Console.WriteLine(test.Text); //outputs test
Console.WriteLine(TestMethod(test)); //outputs test
}
static string TestMethod(dynamic obj)
{
return obj.Text;
}
}
Upvotes: 13
Reputation: 20569
This works fine :)
public class Program
{
private static void Main(string[] args)
{
Console.WriteLine(Test.TestMethod(new[] {new {txt = "test"}}));
Console.ReadLine();
}
}
public class Test
{
public static string TestMethod(IEnumerable<dynamic> obj)
{
return obj.Select(o => o.txt).FirstOrDefault();
}
}
Upvotes: 3
Reputation: 203812
It looks like you want:
class Test
{
public static string TestMethod(dynamic obj)
{
return obj.txt;
}
}
You're using it as if it's a single value, not a sequence. Do you really want a sequence?
Upvotes: 36