单个语句中的C#类型赋值和方法调用

时间:2012-01-31 08:38:38

标签: c#

我有这个:

var doc = new XmlDocument();
doc.LoadXml("<XMLHERE/>"); //This returns void

如何合并为一个声明?

6 个答案:

答案 0 :(得分:5)

使用返回XDocument对象的静态XDocument.Parse(string xml);

    XDocument doc = XDocument.Parse("<XMLHERE/>");

答案 1 :(得分:4)

您不能,以免丢失对文档(doc)的引用,因此发现它无法访问。

由于其他答案已经开始过滤而与我的断言相矛盾,我要说的就是这个。当然,你可以创建一种方法来为你做“肮脏的工作”,但是你不是真的只是把它变成一个单行,你只是脱离了创造(和除非你需要在数百个不同的地方写这个,否则不会真正保存。)

在许多情况下这可能不是一件坏事,但定义一个带有单一扩展方法的类来促进这一点似乎很荒谬。在一个可以广泛使用的类中,在本地指定它可能是另一回事。

总而言之,我的答案仍然是根本性的,而不是考虑你可以“解决”这个问题的许多人为的方法。

答案 2 :(得分:2)

这可能是你最好的(替代两行)选项......

public static XmlDocument MyLazyAssFunction(xml)
{
    var doc = new XmlDocument();
    doc.LoadXml(xml);
    return doc;
}

然后这是你的单一陈述......

var doc = MyLazyAssFunction("<XMLHERE/>");

这里的重点是你原来的两条线是完成你需要做的事情的完美方式..而且它非常易读,因为它也是如此

答案 3 :(得分:1)

仅使用XmlDocument API,您无法在一行中执行此操作并保留XmlDocument引用。但是你可以写一个帮助API

public static class XmlUtils {
  public static XmlDocument CreateDocument(string xml) {
    var doc = new XmlDocument();
    doc.LoadXml(xml);
    return doc;
  }
}

var doc = XmlUtils.CreateDocument("<XMLHERE/>");

答案 4 :(得分:1)

你做不到。如果定义变量不计为语句,则可以写:

XmlDocument doc;
(doc = new XmlDocument()).LoadXml("<XMLHERE/>");

答案 5 :(得分:1)

您可以撰写extension

public static XmlDocument MyLoad(this XmlDocument doc, string xml)
{
    doc.LoadXml(xml);
    return doc;
}

用法:

var doc = new XmlDocument().MyLoad(xml);