Передача анонимного объекта в качестве аргумента в С#
У меня проблема с передачей анонимного объекта в качестве аргумента в методе. Я хочу передать объект, как в JavaScript. Пример:
function Test(obj) {
return obj.txt;
}
console.log(Test({ txt: "test"}));
Но в С# это исключает множество исключений:
class Test
{
public static string TestMethod(IEnumerable<dynamic> obj)
{
return obj.txt;
}
}
Console.WriteLine(Test.TestMethod(new { txt = "test" }));
Исключения:
- Аргумент 1: невозможно преобразовать из "Анонимного типа №1" в
'System.Collections.Generic.IEnumerable'
- Наилучшее перегруженное соответствие метода для
'ConsoleApplication1.Test.TestMethod(System.Collections.Generic.IEnumerable)'
имеет некоторые недопустимые аргументы
- 'System.Collections.Generic.IEnumerable' не содержит
определение для 'txt' и никакого метода расширения 'txt', принимающего первый
аргумент типа "System.Collections.Generic.IEnumerable"
(если вы не указали директиву или сборку
ссылка?)
Ответы
Ответ 1
Похоже, вы хотите:
class Test
{
public static string TestMethod(dynamic obj)
{
return obj.txt;
}
}
Вы используете его, как будто это одно значение, а не последовательность. Вам действительно нужна последовательность?
Ответ 2
Это должно сделать это...
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;
}
}
Ответ 3
Это отлично работает:)
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();
}
}