我有这段代码:
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之前声明它。我该如何解决这种情况?感谢。
答案 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;