2009-07-16 59 views

回答

5

使用链接中的代码示例,可以添加另一种类似的方法,或使用ToArray()方法将它们转换为数组。

public static class XmlTools 
{ 
    public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> inputs) 
    { 
    return inputs.Select(pArg => pArg.ToXmlString()); 
    } 
} 
+2

的可能感兴趣:研究语言Cω(其中Linq的一些想法是第一个原型)自动定义了您的示例方法。 `IEnumerable `将有效地使用与`T`方法同名的方法,但返回类型`R`将变为`IEnumerable `。这就像“Select”以非常简洁的方式嵌入语言中。 – 2009-07-16 16:29:36

2

我会写我的扩展方法来产生一个新的IEnumerable,而不是一个数组:

public static IEnumerable<string> XmlSerializeAll<T>(this IEnumerable<T> input) 
{ 
    foreach (T item in input) 
    { 
     yield return item.ToXmlString(); 
    } 
} 

你可以得到你想要的阵列易于使用

var myArray = myEnumerable.XmlSerializeAll().ToArray(); 

这样,你增加了一些灵活性。这是可能产生列表,而不是,或使用无限长的枚举,如果你喜欢:)

+0

darn you beat me – 2009-07-16 16:23:26

7

要回答你的下几个问题...

new XElement("people", myPeople.ToXElements()); 

public static class XmlTools 
{ 
    public static XElement ToXElement<T>(this T input) 
    { 
     return XElement.Parse(input.ToXmlString()); 
    } 
    public static IEnumerable<XElement> ToXElements<T>(this IEnumerable<T> input) 
    { 
     foreach (var item in input) 
      yield return input.ToXElement(); 
    } 
    public static IEnumerable<string> ToXmlString<T>(this IEnumerable<T> input) 
    { 
     foreach (var item in input) 
      yield return item.ToXmlString(); 
    } 
    public static string ToXmlString<T>(this T input) 
    { 
     using (var writer = new StringWriter()) 
     { 
      input.ToXml(writer); 
      return writer.ToString(); 
     } 
    } 
    public static void ToXml<T>(this T objectToSerialize, Stream stream) 
    { 
     new XmlSerializer(typeof(T)).Serialize(stream, objectToSerialize); 
    } 

    public static void ToXml<T>(this T objectToSerialize, StringWriter writer) 
    { 
     new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize); 
    } 
} 
相关问题