从c#中的方法返回多个值

时间:2014-03-03 17:06:16

标签: c#

我有一个问题,就是从方法中返回两个值。

我有一个方法,我必须从中返回两个值。我确实喜欢这个。

public string fileName(string rate,out string xmlName,out string xsdName)
{
    if(rate=="2013")
    {
       xmlName="abc";
       xsdName="def";
    }

    if(rate=="2014")
    {
       xmlName="pqr";
       xsdName="xyz";
    }

    //stmt 1 (Here it is asking to give default values for xmlname and xsdName.But i dont want to give any default values.)
}

现在在另一个类中,我必须调用此函数并在该类中分配xmlnamexsdName的这些值。我怎么能这样做?

6 个答案:

答案 0 :(得分:7)

public OtherClass fileName(string rate)
{
    OtherClass obj = new OtherClass();
    if (rate == "2013")
    {
        obj.xmlName = "abc";
        obj.xsdName = "def";
    }
    if (rate == "2014")
    {
        obj.xmlName = "pqr";
        obj.xsdName = "xyz";
    }
    return obj;
}

public class OtherClass
{
    public string xmlName { get; set; }
    public string xsdName { get; set; }
}

答案 1 :(得分:4)

你会这样使用它:

string xmlName;
string xsdName;
fileName("2014", out xmlName, out xsdName);

您的fileName()方法的返回类型可以为void,因为您在技术上不会从函数返回任何内容。

答案 2 :(得分:3)

最好的概念是使用面向目标的编程。创建一个具有两个属性xmlNamexsdName的类。然后从方法返回该类的新实例。

下面的代码可以给你一个想法。

文件XmlFile.cs

中的类实现
public class XmlFile
{
    public string XmlName
    { get; set; }
    public string XsdName
    { get: set; }
}

功能实现:

public XmlFile fileName(string rate)
{
    XmlFile file = new XmlFile();

    if (rate == "2013")
    {
        file.XmlName = "abc";
        file.XsdName = "def";
    }

    if (rate == "2014")
    {
        file.XmlName = "pqr";
        file.XsdName = "xyz";
    }

    return file;
}

请详细查看OO编程,您需要使用C#。

答案 3 :(得分:2)

你的问题很模糊,但我会尽我所能。

以下是调用fileName并接收最后两个参数的输出的方法:

string xmlName;
string xsdName;

myInstance.fileName("2014", out xmlName, out xsdName);

我倾向于回避使用out。更好的解决方案是创建一个包装数据的新类:

public class File
{
    public File(string fileName, string xmlName, string xsdName)
    {
        FileName = fileName;
        XmlName = xmlName;
        XsdName = xsdName;
    }

    public string FileName
    {
        get;
        private set;
    }

    public string XmlName
    {
        get;
        private set;
    }

    public string XsdName
    {
        get;
        private set;
    }
}

public class OtherClass
{
    public File FileName(string rate)
    {
        switch (rate)
        {
            case "2013":
                return new File(..., "abc", "def");
            case "2014":
                return new File(..., "pqr", "xyz");
            default:
                throw new ArgumentException(String.Format("Unexpected rate '{0}'.", rate)); // Or, simply return null
        }
    }
}

答案 4 :(得分:2)

使用out参数调用函数:

string xmlN;
string xsdN;
var result = fileName("rate value", out xmlN, out xsdN);

但有一个问题是你需要在函数结束之前分配它们。 在这种情况下,将它们设置为null可能是合适的。

答案 5 :(得分:2)

有几种可行的方法。首先是你如何做 - 输出参数

string xmlName, xsdName;
filename("xxx", out xmlName, out xsdName);

第二个是使用元组。

public Tuple<string, string> fileName(string rate) 
{
    ...
    return Tuple.Create(xmlName, xsdName)
}

第三个是定义你自己的类

class XmlInfo
{
    public string XmlName {get; set;}
    public string XsdName {get; set;}
}


XmlInfo filename(string rate)
{
    ...
    return new XmlInfo() { XmlName = xmlName, XsdName = xsdName };
}