我是(非常)新的C#;我确信这里的解决方案很简单,但我无法理解。
假设星期五有一个简单的温度阵列。我从某处收到了日期和小时(整数)的缩写,我想用它来打印数组中的元素:
using System;
public class Program
{
public static void Main()
{
double[] Friday = {54.5, 61.0, 63.5, 58.0};
string Today = "Fri";
int Hour = 1;
double parsed = Convert.ToDouble(Today + "day[" + int + "]");
Console.WriteLine(parsed);
}
}
鉴于这些条件,我该如何输出61.0?然后,最终结果应该等同于Console.WriteLine(Friday [1]);
答案 0 :(得分:1)
c#使用零相对索引。这意味着数组中的第一个元素的索引为零。所以你很可能意味着Friday[0]
。
c#在所有对象上也有ToString
方法。这将返回对象的“人类可读”表示。所以你可以做到
Console.WriteLine(Friday[0].ToString());
此外,WriteLine
会自动将传递给它的任何对象转换为其字符串表示形式。所以这也可行
Console.WriteLine(Friday[0]);
如果您想要文本和值,请使用格式字符串,如
Console.WriteLine("Friday {0}", Friday[0]);
有关格式字符串的详细信息,请参阅https://msdn.microsoft.com/en-us/library/system.string.format%28v=vs.110%29.aspx。
答案 1 :(得分:1)
如果我真的想要实现这一点,我会使用字典:
Dictionary<string, double[]> dayToValues =
new Dictionary<string, double[]>
{
{"Monday", new double[] {1.0, 2.0, 3.0} },
{"Friday", new double[] {4.0, 5.0, 6.0} }
};
string today = "Fri";
int hour = 0;
double firstHourValue = dayToValues[today + "day"][hour];
Console.WriteLine(firstHourValue); // prints "4"
如果您确实需要动态构建变量的名称并访问它,则必须使用反射。类似的东西:
string fieldName = today.ToLower() + "day";
double[] todays = GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this) as double[];
Console.WriteLine(todays[1]); // prints "8"
这假设您在当前类中拥有私有字段:
double[] friday = { 7.0, 8.0, 9.0 };
当然,反射代码取决于变量的确切位置和范围。显而易见,您需要一些空引用检查才能在现实世界中使用它。无论如何,使用反射看起来似乎与您的需求无关。只有在你真的需要时才使用它。