4.5.3 输出参数(out)
除了将参数单向传入一个方法(传值),或者同时将参数传入和传出一个方法(传引用)之外,还可以将数据从一个方法内部单向传出方法。为此,代码需要使用关键字out来修饰参数类型。例如代码清单4-13的GetPhoneButton()方法,它能返回与一个字符对应的电话按键。
代码清单4-13 仅传出的变量
class ConvertToPhoneNumber { static int Main(string[] args) { char button; if(args.Length == 0) { Console.WriteLine( "ConvertToPhoneNumber.exe <phrase>"); Console.WriteLine( "'_' indicates no standard phone button"); return 1; } foreach(string word in args) { foreach(char character in word) { if(GetPhoneButton(character, out button)) { Console.Write(button); } else { Console.Write('_'); } } } Console.WriteLine(); return 0; }
static bool GetPhoneButton(char character, out char button) { bool success = true; switch( char.ToLower(character) ) { case '1': button = '1'; break; case '2': case 'a': case 'b': case 'c': button = '2'; break; case '3': case 'd': case 'e': case 'f': button = '3'; break; case '4': case 'g': case 'h': case 'i': button = '4'; break; case '5': case 'j': case 'k': case 'l': button = '5'; break; case '6': case 'm': case 'n': case 'o': button = '6'; break; case '7': case 'p': case 'q': case 'r': case 's': button = '7'; break; case '8': case 't': case 'u': case 'v': button = '8'; break; case '9': case 'w': case 'x': case 'y': case 'z': button = '9'; break; case '*': button = '*'; break; case '0': button = '0'; break; case '#': button = '#'; break; case ' ': button = ' '; break; case '-': button = '-'; break; default: // Set the button to indicate an invalid value button = '_'; success = false; break; } return success; } } |
输出4-7展示了代码清单4-13的结果。
输出4-7
>ConvertToPhoneNumber.exe CSharpIsGood 274277474663
|
在这个例子中,假如能成功判断与一个字符对应的电话按键,GetPhoneButton()方法就返回true。方法还会使用被声明为out的button参数来返回对应的按钮。
如果一个参数被标记为out,编译器就会核实方法内的所有代码路径是否都设置了该参数。例如,假定在某个代码执行路径中,没有对button进行赋值,编译器就会报告一个错误,指出代码没有对button进行初始化。在代码清单4-13中,方法最后将"_"值赋给button,因为即使它无法判断正确的电话按键,也必须对button进行赋值。
【责任编辑:
夏书 TEL:(010)68476606】