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 框架,以便:
- 启动程序后下载最新汇率
- 创建单独包含这些比率的变量
- 将这些变量私密地存储在 class 中,并在每个表单中引用相关变量
(不幸的是,作业需要多格式布局 - 否则我会使用单一格式的下拉菜单。)
这是我迄今为止使用的代码 - 在控制台应用程序中用于规划和测试:
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
}
}
再次感谢您!明天我给他看这个时,我的讲师可能会觉得有点傻。
我正在更新一个 Windows 表单应用程序,它可以将不同的货币相互转换(例如,英镑转换为欧元,反之亦然)。我的一个想法是创建一个 class,它利用 Web API 框架,以便:
- 启动程序后下载最新汇率
- 创建单独包含这些比率的变量
- 将这些变量私密地存储在 class 中,并在每个表单中引用相关变量
(不幸的是,作业需要多格式布局 - 否则我会使用单一格式的下拉菜单。)
这是我迄今为止使用的代码 - 在控制台应用程序中用于规划和测试:
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
}
}
再次感谢您!明天我给他看这个时,我的讲师可能会觉得有点傻。