正如标题所述;我有(如下所示)一个Structure类型的数组。 但是尝试从中提取数据并不起作用,因为它被评估为Object类型。 如果可能的话,如果可能的话,我真的很喜欢这种态度。
private Entity makeEntity(params KeyValuePair<String, object>[] fields)
{
Entity entity = new Entity();
IEnumerator cons = fields.GetEnumerator();
Field field;
Value value;
while (cons.MoveNext()){
value = new Value();
value.value = cons.Current.Value;
field = new Field();
field.name = cons.Current.Key;
field.values.Add(value);
entity.fields.Add(field);
}
return entity;
}
答案 0 :(得分:2)
最简单的解决方法是更改cons
的声明类型:
IEnumerator<KeyValuePair<string, object>> cons = ((IEnumerable<KeyValuePair<string, object>>)fields).GetEnumerator();
但是,您应该使用foreach
来迭代元素:
foreach(var kvp in fields)
{
...
}
答案 1 :(得分:0)
为什么不使用对象(或匿名对象)?
private Entity makeEntity(object obj)
{
Entity entity = new Entity();
foreach(var kvp in new RouteValueDictionary(obj))
{
entity.fields.Add(new Field {name=kvp.Key, values={new Value {value=kvp.Value}});
}
return entity;
}
在大多数情况下,使用起来容易得多:
var x = makeEntity(new {Field1=Value1, Field2=Value2, Field3=Value3});
答案 2 :(得分:-2)
我认为
中提出的强制转换功能What is the best way to convert an IEnumerator to a generic IEnumerator?
可能是您正在寻找的解决方案:
IEnumerator<T> Cast<T>(IEnumerator iterator)
{
while (iterator.MoveNext())
{
yield return (T) iterator.Current;
}
}
你可以在你的代码中这样称呼它:
...
var cons = Cast<KeyValuePair<String, object>>(fields.GetEnumerator());
...