如何在 try-catch 块之外使用 var - 变量

How to use var - variable outside of try-catch block

我在 try/catch 中有 var 个结果。我想使用 try/catch 块的结果,但我不能在 try 块之前声明,因为 var 在运行时获取类型。我可以吗?

public long getConfigVal<T>( int key, ref T sResult)
  {
        var myValue;
        try
        {                    
            myValue = (from el in keyValueList 
       select (string)el.Attribute("value").Value).FirstOrDefault();
        }
        catch (Exception ex)
        {

        }
    if (sResult is string)
                        sResult = (T)(object)myValue;
                    if (sResult is int)
                        sResult = (T)(object)int.Parse(myValue);
                    if (sResult is DateTime)
                        sResult = (T)(object)DateTime.Parse(myValue); 
}

或者有什么方法可以在块外使用 myValue

不,您不能声明一个接收者类型为 var 的变量,然后决定不对其进行内联初始化。

假设 select el.Value 不是 return 匿名类型,您将需要求助于使用明确类型化的变量。

IEnumerable<int> myValue;

例如:

它与 try/catch 无关,您必须在定义它们的地方初始化 var 的用法。他们 推断 从作业右侧部分的类型 - 他们仍然是类型。 var myInt = 1; 仍然是一个整数,你只需让编译器从文字 1 中推断出来。您尝试执行的操作无法在 C# 中使用隐式键入来完成。

'...因为 var 在运行时获取类型。' - 不,这一切都在编译时。您只需要声明变量的类型。

你也可以使用动态变量:

dynamic _myvalue;
    public MainWindow()
    {
        try
        {
          var myValue =
                from el in keyValueList
                select el.Value;
            _myvalue = myValue;
        }
        catch (Exception ex)
        {

        }
    }

感谢 Evk 的好回答(但在评论中......) 我将 myValue 声明为一个对象:

 string myValue;
try
{                    
    myValue = from el in keyValueList select el.Value;
}
catch (Exception ex)
{

}

我认为您不需要声明 var myValue。

您有一个泛型方法,因此您需要 T 作为 resultType。你为什么不用这个?

转换为泛型比将 var 声明为动态类型更容易或至少更省事。

并且此答案可能不包含代码,但寻找用于将字符串转换为 value-Type... 或字符串的扩展方法并不是为了获得保存解决方案而付出的巨大努力。 ;-)