我需要编写一个使用(单行 if)语句的语法,但我需要在某种意义上嵌套它:
(表达式 1)?
(如果表达式 2 抛出ArgumentException
则string.empty
else expression2
):string.empty
所以基本上我需要弄清楚在 c# 中的单行 if 语句中使用 try catch 的语法(单行,因为我需要在 linq to sql select 语句中使用它。)
单行 if 语句我的意思是使用三元运算符 if 语句而没有任何分号。
我需要编写一个使用(单行 if)语句的语法,但我需要在某种意义上嵌套它:
(表达式 1)?
(如果表达式 2 抛出ArgumentException
则string.empty
else expression2
):string.empty
所以基本上我需要弄清楚在 c# 中的单行 if 语句中使用 try catch 的语法(单行,因为我需要在 linq to sql select 语句中使用它。)
单行 if 语句我的意思是使用三元运算符 if 语句而没有任何分号。
你在找这样的东西吗?
(/*expression1*/)? (foo()? string.empty: /*expression2*/):string.empty
与 foo 是:
public /*static?*/ bool foo()
{
try
{
//do stuff
}
catch(ArgumentException)
{
return true
}
catch
{
return false
}
return false;
}
至于将 Try/Catch 嵌入到 Linq to Sql 语句中......好吧,我们只是说在这种情况下我会尝试重新考虑我的设计。
这是一个有趣的问题,因为它会让您问:代码块需要标记为“单行”的标准应该是什么?
显然,写 8 行代码然后去掉换行符并不会变成一行代码。
这个怎么样:
public string Expression2()
{
return "One does not write maintainable code this way";
}
[Test]
public void TryCatchAsSingleLine()
{
bool expr1 = true;
// Would you say this is one line?
string result = expr1
? (new Func<string>(() =>
{
try
{
return Expression2();
}
catch
{
return string.Empty;
}
}
)
)()
: string.Empty;
}
将此用作单线:
Exception e=null; try { expr1; } catch (Exception ex) {e = ex;} if (e is ArgumentException) { expression2; } else { do whatever or not sure what you want to do with string.empty; }
尝试使用一两个方法调用。
class Test
{
static void Main(string[] args)
{
if (ExpressionOne() && ExpressionTwo() != string.Empty) DoSomething();
}
static bool ExpressionOne()
{
// check something
}
static string ExpressionTwo()
{
try
{
return ThisMayThrowArgumentExceptionOrReturnAString();
}
catch (ArgumentException)
{
return string.Empty;
}
}
// ...
}
C# 不是面向行的,因此您可以在一行上编写所有内容,但生成的代码并不总是可读和可维护的。
我会为可能失败的代码编写一个单独的方法。
public string GetResultSafely()
{
try {
// Possibly failing
return ReadStringFromExternalResource();
} catch() {
return String.Empty;
}
}
进而
result = expression1 ? GetResultSafely() : GetAnotherResult();
请注意,抛出异常不应该是标准的做事方式。如果可能,请避免异常。
坏的:
try {
result = x / y;
} catch {
Console.WriteLine("Division by zero!");
}
好的:
if (y == 0) {
Console.WriteLine("Division by zero!");
} else {
result = x / y;
}
但是,在某些情况下,例外是不可避免的。通常在访问外部资源时。