1

我的代码有问题,或者我只是不完全理解这一点。我有以下代码运行一个查询,该查询可能包含多个 RIGHT 属性,并希望将每个属性存储在一个数组中以供以后获取:

        var members = from myList in o_data.Descendants(bp + "Reaction")
                            select new
                            {
                                participant = myList.Element(bp + "RIGHT").Attribute(rdf + "resource").Value,
                            };

        return members.ToArray(); // I this the right conversion (to store all attributed values to array)?

因为他们在 Silverlight 中没有集合,所以我试图只返回一个数组......当我这样调用函数时:

FunctionName.GetValue(0).ToString();

它返回 { 参与者 = #(ValueOfAttribute) }

我只想返回实际值,而不是花括号或“particpant =”这里发生了什么?

4

1 回答 1

4

大括号在那里,因为您在 linq 查询中创建的匿名类型的 ToString 实现将它们放在那里。

这是来自匿名类型的 ToString 实现:

public override string ToString()
{
    StringBuilder builder = new StringBuilder();
    builder.Append("{ test = ");
    builder.Append(this.<test>i__Field);
    builder.Append(" }");
    return builder.ToString();
}

如果您只想返回“参与者”的值,请删除所有匿名类型的东西并选择该值:

var members = from myList in o_data.Descendants(bp + "Reaction")
  select myList.Element(bp + "RIGHT").Attribute(rdf + "resource").Value;
return members.ToArray();

最后,如果您想为每个元素选择多个值(您的示例代码有一个悬空的逗号表示这一点),请定义一个命名类型并在您的查询中创建该类型的实例。然后,您可以在查询方法之外引用该类型的属性,因为该数组将是该类型的实例数组,而不是对象数组。

于 2008-11-03T22:05:46.333 回答