C#,如何使用 WebAPI 在 class 中创建变量,然后可以在不同的 class 中引用这些变量?

C#, how do I use WebAPI to create variables within a class, which can then be referenced in a different class?

我正在更新一个 Windows 表单应用程序,它可以将不同的货币相互转换(例如,英镑转换为欧元,反之亦然)。我的一个想法是创建一个 class,它利用 Web API 框架,以便:

(不幸的是,作业需要多格式布局 - 否则我会使用单一格式的下拉菜单。)

这是我迄今为止使用的代码 - 在控制台应用程序中用于规划和测试:

static void Main(string[] args)
    {
        string URL = "https://openexchangerates.org/api/latest.json?app_id=4837847d2bc64fc496cf325525c5cf0d";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.ContentType = "application/json; charset=utf-8";
        request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("GBP"));
        request.PreAuthenticate = true;
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            string streamString = reader.ReadToEnd();
            string[] streamArray = Regex.Split(streamString, "\n|: |,\s*");

            foreach (string s in streamArray)
            {
                if (s.Equals("\"GBP\""))
                {
                    int element = Array.IndexOf(streamArray,s);
                    string dTPString = streamArray[element + 1];
                    double dollarsToPounds = Convert.ToDouble(dTPString);
                }

                if (s.Equals("\"EUR\""))
                {
                    int element = Array.IndexOf(streamArray, s);
                    string dTEString = streamArray[element + 1];
                    double dollarsToEuros = Convert.ToDouble(dTEString);
                }
            }
        }

        Console.WriteLine(dollarsToPounds); //does not work
        Console.WriteLine(dollarsToEuros); //does not work
    }

测试数组赋值后,双变量 "dollarsToPounds" 和 "dollarsToEuros" 已被证明在 "using (Stream...)" 语句的上下文中具有正确的值 - 然而,由于 "using" 的属性,这些变量没有在其上下文之外赋值 (在 Main() 的开头声明变量不影响这个结果)。

有没有我可以使用的方法结构来执行与 "using (Stream...)" 相同的任务,即读取提供的 URL 的内容,然后允许引用变量同一 class 内的其他地方?这将允许我在 class.

之外引用它

如果您需要我进一步解释代码,请务必询问。

您可以移动

的声明
double dollarsToPounds 

double dollarsToEuros 

到行前

static void Main(string[] args) 

感谢Tony的指点,我已经实现了我提出的上述问题的解决方案! 关键是在进入实现 WebAPI 和 StreamReader 的方法之前声明变量 dollarsToPounds 和 dollarsToEuros,并在方法开始之前调用 class 的实例:

 class Program
{
    double dollarsToPounds;
    double dollarsToEuros;

    static void Main(string[] args)
    {
        Program program = new Program();

        string URL = "https://openexchangerates.org/api/latest.json?app_id=4837847d2bc64fc496cf325525c5cf0d";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.ContentType = "application/json; charset=utf-8";
        request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("GBP"));
        request.PreAuthenticate = true;
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            string streamString = reader.ReadToEnd();
            string[] streamArray = Regex.Split(streamString, "\n|: |,\s*");

            foreach (string s in streamArray)
            {
                if (s.Equals("\"GBP\""))
                {
                    int element = Array.IndexOf(streamArray,s);
                    string dTPString = streamArray[element + 1];

                    program.dollarsToPounds = Convert.ToDouble(dTPString);
                }

                if (s.Equals("\"EUR\""))
                {
                    int element = Array.IndexOf(streamArray, s);
                    string dTEString = streamArray[element + 1];
                    program.dollarsToEuros = Convert.ToDouble(dTEString);
                }
            }
        }
        Console.WriteLine(program.dollarsToPounds); //works!
        Console.WriteLine(program.dollarsToEuros); //works!
    }
}

结构,简化:

class ClassName
{
    //variables go here

    static void MethodName()
    {
        ClassName instance = new ClassName();
            //Web API, using StreamReader, arrays, nested foreach-if statements go here
        //variables can now be referenced outside of "using" context
    }
}

再次感谢您!明天我给他看这个时,我的讲师可能会觉得有点傻。