Вариант 1 - сделать это правильно
Другими словами, не используйте другие методы, если вы действительно не должны
Вы действительно не должны возвращать анонимные типы, правильный способ сделать это - создать правильный класс и вернуть его вместо этого. В противном случае вам придется прибегнуть к рефлексии или динамическим типам, которые просто смешны:
Класс:
public class Foo
{
public string String1 { get; set; }
public string String1 { get; set; }
}
Метод:
private Foo Function1()
{
return new Foo
{
String1 = "a",
String2 = "b"
}
}
Использование:
var a = Function1().String1; // Though it's worth checking for a null return in production code
Вариант 2 - Использовать отражение
Другими словами, не делайте этого
Используя приведенный выше код, вы можете использовать отражение, чтобы получить свойство и вызвать его вручную, например:
var result = function1();
var property = result.GetType().GetProperty("string1");
var a = (string)property.GetValue(result);
Вариант 3 - использование динамического набора
Другими словами, пожалуйста, с сахаром сверху, не делайте этого!
Приведите возврат к динамическому, и вы можете вызвать любой метод / свойство, которое вам нравится, но это не является безопасным для типа и вызовет исключение времени выполнения, если вы вызовете несуществующий метод.
var result = (dynamic)function1();
var a = (string)result.string1;