Передача анонимного объекта в качестве аргумента в C#

у меня проблема с передачей анонимного объекта в качестве аргумента в методе. Я хочу передать объект в JavaScript. Пример:

function Test(obj) {
    return obj.txt;
}
console.log(Test({ txt: "test"}));

но в C# он выдает много исключений:

class Test
{
    public static string TestMethod(IEnumerable<dynamic> obj)
    {
        return obj.txt;
    }
}
Console.WriteLine(Test.TestMethod(new { txt = "test" }));

исключения:

  1. Аргумент 1: не удается конвертировать из 'AnonymousType#1' в - Система.Коллекции.Родовой.Интерфейс IEnumerable'
  2. лучший перегруженный метод match для 'ConsoleApplication1.Тест.TestMethod (System.Коллекции.Родовой.интерфейс IEnumerable') имеет некоторые недопустимые аргументы
  3. '.Коллекции.Родовой.IEnumerable' не содержит определение для " txt "и без метода расширения "txt", принимающего первый аргумент типа 'System.Коллекции.Родовой.Интерфейс IEnumerable' может быть найден (отсутствует помощью директивы или сборки ссылка?)

3 ответов


похоже, вы хотите:

class Test
{
    public static string TestMethod(dynamic obj)
    {
        return obj.txt;
    }
}

вы используете его как одно значение, а не последовательность. Вы действительно хотите последовательность?


это должно помочь...

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;
    }
}

Это прекрасно работает :)

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();
    }
}