我使用asp.net 4和c#。
我想知道是否可以在方法中返回多个返回类型。
作为此方法的示例,我只返回一个bool类型。
protected bool IsFilePresent()
{
return File.Exists(Server.MapPath("/myFile.txt"));
}
但是让我们想象一下,我想在类似的方法中返回一个字符串类型:
string lineBase = File.ReadAllText(Server.MapPath("/myFile.txt"));
有可能吗?
我会很感激一些代码示例。非常感谢。
答案 0 :(得分:7)
不,不可能返回多个不同的值。你有几个选择:
答案 1 :(得分:2)
对于此示例,您有3个选择。
protected bool IsFilePresent(out String allText)
{
Boolean fileExists = File.Exists(Server.MapPath("/myFile.txt"));
if (fileExists)
{
allText = File.ReadAllText(Server.MapPath("/myFile.txt"));
}
return fileExists;
}
答案 2 :(得分:1)
是的,只有你使用框架才能使用4.查看元组
答案 3 :(得分:0)
不,您可以使用out
参数。
http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/aa645764(v=vs.71).aspx
答案 4 :(得分:0)
您可以在其中返回包含不同类型的类:
class TestFile
{
private bool isFilePresent;
private string lineBase;
}
答案 5 :(得分:0)
是的,您可以创建一个名为(例如)“包含”的包装类,使用两种类型进行参数化,将两个值放在该类的对象中并作为结果返回。在你的情况下,它会像Pair
我不是C#程序员,所以我不会给你准确的代码。
答案 6 :(得分:0)
您有两种选择。
第一个,更多C-ish:out参数:
void test(out bool p1, out bool p2) {
p1 = true;
p2 = false;
}
第二个,更多OO,使用结构或类来包含结果:
class Result {
public bool Part1 {get;set;}
public bool Part2 {get;set;}
}
Result test() {
return new Result {Part1 = true, Part2 = false};
}
在C#4中,您可以使用Tuple class而不是创建自己的结果类。
我没有查看您的具体要求,但您可以根据需要组合这些方法,但请记住,至少根据微软指南,不建议在面向对象编程中使用out参数。
答案 7 :(得分:0)
您可能希望使用out
- 参数。
protected bool IsFilePresent(out string fileContents) {
string filePath = Server.MapPath("/myFile.txt");
try {
fileContents = File.ReadAllText(filePath);
return true;
} catch {
fileContents = null;
return false;
}
}
答案 8 :(得分:0)
是的,您可以使用输出参数。
public bool GetData(string filename, out string data)
{
if (File.Exists(filename))
{
data = File.ReadAllText(filename);
return true;
}
data = string.Empty;
return false;
}
string data;
if (GetData(Server.MapPath("/myFile.txt"), out data))
{
// do something with data
}
答案 9 :(得分:0)
是的,我们可以。 dotNet 4支持动态类型,因此您可以返回多种类型
public dynamic GetSomething()
{
if (!File.Exists(Server.MapPath("/myFile.txt")))
return false;
else
return File.ReadAllText(Server.MapPath("/myFile.txt"));
}
var result = GetSomething();
if(result is bool && result == false)
{
//doSomething();
}
这种方式难以阅读您的代码。
答案 10 :(得分:0)
如今非常简单...使用元组
public (string,int) MyMethod(){
return ("text", 3);
}
string text;
int number;
(text, number) = MyMethod();
//OR
(var text, var number) = MyMethod();