转换对象匿名类型
问题描述:
如何遍历如果我询问消息的类型和打印传递在如下(first, second, third) => new { One = first, Two = second, Three = third }
转换对象匿名类型
对象的anonymous type
的IEnumerable的,它说:<>f__AnonymousType0 3[MtApi.MtQuote,MtApi.MtQuote,MtApi.MtQuote]
//**How do I convert an object to the anonymous type?**
static void ShowAnonymousTypeMessage(object message)
{
foreach(var quote in message)
Console.WriteLine(
quote.Instrument + ": " + quote.Bid.ToString() + quote.Ask.ToString());
}
...
var pattern = observable1.And(observable2).And(observable3);
var plan = pattern.Then((first, second, third) => new { One = first, Two = second, Three = third });
var zippedSequence = Observable.When(plan);
zippedSequence.Subscribe(
ShowAnonymousTypeMessage
);
答
答
匿名类型不打算被传来传去,你应该只在绝对必要时使用的对象。你也不能迭代匿名类型 - 你应该使用Array
。
var pattern = observable1.And(observable2).And(observable3);
var plan = pattern.Then((first, second, third) => new[] { first, second, third });
var zippedSequence = Observable.When(plan);
zippedSequence.Subscribe(
ShowAnonymousTypeMessage
);
答
匿名类型是注定不会被传来传去,出于同样的原因,我们有强大的类型在C#中的所有:编译器不会使不小心的错误或忘记的事情,我们经常这样做。如果你的匿名类实例正在离开它们创建的范围,那么他们应该成长并成为一个真正的类。
通常我会说你应该写有适当的属性(在属性类型这里猜测)匆匆类:
public class Thing {
public String One { get; set; }
public String Two { get; set; }
public String Three { get; set; }
}
但是,Tuple<T1,T2,T3>
一样好真的,如果你有属性名称像One
,Two
,并Three
反正:
public static void Main()
{
var x = Enumerable.Range(0, 10).Select(n => new Tuple<int, string>(n, $"Item {n + 1}"));
Test(x);
}
private static void Test(IEnumerable<Tuple<int, string>> stuff)
{
foreach (var item in stuff)
{
Console.Write($"{item.Item1}: {item.Item2}");
}
}
dynamic
作品,但dynamic
就像虎钳握: “总是错误的工具对于每一个工作,自1921年以来”。 dynamic
在类型系统中具有合法但很小的作用。它不在那里,所以我们可以把整个语言变成JavaScript。
public static Main()
{
var x = Enumerable.Range(0, 10).Select(n => new { ID = n, Value = $"Item {n + 1}" });
Test(x);
}
private static void Test(dynamic message)
{
foreach (dynamic item in message)
{
Console.Write($"{item.ID}: {item.Value}");
}
}
确定,虎钳握不总是错误的工具无论是。但很少有没有更好的。
你可以设置一个断点和询问模式来查看它是什么类型,并且它是否实现IEnumerable? –
在C#
@ kevin查看原文 – Ivan