如何在C#中使用try catch with var

时间:2016-09-22 05:55:33

标签: c# try-catch

我有这段代码:

var takbis = o.DeserializeXmlString<List<Takbis>>();
ViewBag.SessionId = id;
_takbis.GetTakbisValues(takbis, vm);

我想像这样应用try-catch:

try
{
var takbis = o.DeserializeXmlString<List<Takbis>>();
}
catch
{
var takbis = o.DeserializeXmlString<BankReport>();
}

    ViewBag.SessionId = id;

    _takbis.GetTakbisValues(takbis, vm);

但我不能像这样使用它说takbis在目前的背景下不存在。我不知道takbis的类型,所以我不能在尝试catch之前声明它。我该如何解决这种情况?感谢。

4 个答案:

答案 0 :(得分:3)

试试这个:

object takbis;
try
{
    takbis = o.DeserializeXmlString<List<Takbis>>();
}
catch
{
    takbis = o.DeserializeXmlString<BankReport>();
}

    ViewBag.SessionId = id;

    _takbis.GetTakbisValues(takbis, vm);

答案 1 :(得分:3)

我建议您使用dynamic代替var并使用这样的代码。如果使用var,则声明的变量类型由编译器在编译时决定。但在dynamic的情况下,声明的变量类型由编译器在运行时决定。

试试这个:

dynamic takbis;
try
{
   takbis = o.DeserializeXmlString<List<Takbis>>();
}
catch
{
   takbis = o.DeserializeXmlString<BankReport>();
}

详细了解comparison

答案 2 :(得分:2)

这是不可能的。 该变量必须在try子句之外声明,以便以后使用。

答案 3 :(得分:2)

为了您的信息,var在编译时处理,而不是在运行时处理。 另外var实际上不是一个类型,它的实际类型被编译器替换。您可以在编译代码中检查`var&#39;

的类型