可以将以下代码翻译成使用...... ejem ...'using'语句吗?
TextReader TheReader;
if( UploadedFile ) { TheReader = new System.IO.StreamReader( LocalFileName ); }
else { TheReader = new System.IO.StringReader( Input ); }
//Use The reader
TheReader.Close();
所以using (TextReader TheReader = ??)
答案 0 :(得分:4)
你可以使用条件运算符:
// Variable names changed for convention, and fully-qualified names simplified
using (TextReader reader = uploadedFile ? File.OpenText(localFileName)
: (TextReader) new StringReader(input))
{
...
}
转换为TextReader
可以位于最后两个操作数中的任何一个 - 它只是为了让编译器知道表达式的类型,因为它不能找到常见的类型(TextReader
)来自StreamReader
(第2个操作数)和StringReader
(第3个)。
根据Guffa的回答,您可以在using
语句之前分配变量 - 但我个人也会使用此代码来保留变量的范围仅限于using
声明。
答案 1 :(得分:2)
虽然你已经有两个好的答案,但至少有三分之一也值得一提,在某些情况下可能更合适:再使用一个功能。
TextReader CreateReader()
{
if( UploadedFile )
return new System.IO.StreamReader( LocalFileName );
else
return new System.IO.StringReader( Input );
}
然后,使用它:
using (TextReader reader = CreateReader())
{
}
答案 2 :(得分:1)
是的,但不是这样。如果您无法在using
语句中创建实例。但是要注意变量的范围,因为变量的范围在using
块之外。您可以在代码周围使用块来限制变量的范围:
{
TextReader TheReader;
if( UploadedFile ) { TheReader = new System.IO.StreamReader( LocalFileName ); }
else { TheReader = new System.IO.StringReader( Input ); }
using (TheReader) {
//Use The reader
}
}