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

C# 从c中的方法返回多个值#,c#,C#,我对从一个方法返回两个值有疑问 我有一个方法,我必须从中返回两个值。我确实喜欢这个 public string fileName(string rate,out string xmlName,out string xsdName) { if(rate=="2013") { xmlName="abc"; xsdName="def"; } if(rate=="2014") { xmlName="pqr";

我对从一个方法返回两个值有疑问

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

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.)
}

现在在另一个类中,我必须调用这个函数,并在该类中分配
xmlname
xsdName
的值。我该怎么做呢?

你的问题很模糊,但我会尽力的

下面是如何调用
fileName
并接收最后两个参数的输出:

string xmlName;
string xsdName;

myInstance.fileName("2014", out xmlName, out xsdName);
string xmlN;
string xsdN;
var result = fileName("rate value", out xmlN, out xsdN);
我倾向于避免使用
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
        }
    }
}

您可以这样使用它:

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

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

要使用
out
参数调用函数,请执行以下操作:

string xmlName;
string xsdName;

myInstance.fileName("2014", out xmlName, out xsdName);
string xmlN;
string xsdN;
var result = fileName("rate value", out xmlN, out xsdN);
但一个问题是,您需要在函数结束之前分配它们。
在这种情况下,将它们设置为
null
可能是合适的。

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

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; }
}
下面的代码应该会给你一个想法。

类在文件
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#配合使用。

有几种可能的方法。首先是如何操作-输出参数

string xmlName, xsdName;
filename("xxx", out xmlName, out xsdName);
第二个是使用元组

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

如果方法必须返回多个对象,请使用包含数据的类或使用两个方法。重新思考你的逻辑!