如何通过变量名访问 C# struct 属性?
How to access C# struct property by variable name?
如何根据用户在运行时定义的字符串变量访问结构的属性?
我知道这并不理想。这只是一个简单的作业。
我想使用枚举,但据我所知,我不支持存储双精度类型的值。
如果有其他最佳实践,也请提出建议。
感谢您的帮助!
using System;
public struct Rates
{
public const double charterdaily = 1000;
public const double charterhourly = 400;
public const double charterdistance = 3.5;
public const double minibusdaily = 925;
public const double minibushourly = 360;
public const double minibusdistance = 3.25;
public const double sprinterdaily = 850;
public const double sprinterhourly = 320;
public const double sprinterdistance = 3;
public const double partybusdaily = 1000;
public const double partybushourly = 400;
public const double partybusdistance = 3.5;
public const double sedandaily = 7000;
public const double sedanhourly = 240;
public const double sedandistance = 2.5;
public const double suvdaily = 625;
public const double suvhourly = 200;
public const double suvdistance = 2.25;
public const double limodaily = 550;
public const double limohourly = 400;
public const double limodistance = 3.5;
}
public class Program
{
public static void Main(string[] args)
{
int numberOfVehicles;
Console.WriteLine("Enter # of vehicles: ");
numberOfVehicles = Convert.ToInt32(Console.ReadLine());
string vehicleType;
Console.WriteLine("Enter vehicle type. Values accepted: charter, minibus, sprinter, partybus, sedan, suv, limo.");
vehicleType = Console.ReadLine().ToLower();
string pricingMethod;
Console.WriteLine("Enter pricing method. Values accepted: daily, hourly, distance.");
pricingMethod = Console.ReadLine().ToLower();
double pricingMethodUnits; //double because we want to support partial mile distances
switch (pricingMethod)
{
case "daily":
Console.WriteLine("Enter number of DAYS you are renting: ");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
case "hourly":
Console.WriteLine("Enter number of HOURS you are renting:");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
case "distance":
Console.WriteLine("Enter expected DISTANCE traveled in miles: ");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
default:
Console.WriteLine("Invalid pricing method value entered");
break;
}
string enumString = vehicleType + pricingMethod;
Console.WriteLine("enumString value: " + enumString );
//this is where I want to access the Rate struct by the passed in enum string
Console.WriteLine(Rates."{enumString}");
}
}```
我建议使用 static
Dictionary<string, double>
:
private static readonly IReadOnlyDictionary<string, double> Rates =
new Dictionary<string, double>(StringComparer.OrdinalIgnoreCase) {
{ "charterdaily", 1000},
{ "charterhourly", 400},
//TODO: Add all the pairs here
};
然后就可以通过key从字典中读取值了
//this is where I want to access the Rate struct by the passed in enum string
Console.WriteLine(Rates[enumString]);
使用下面的代码行动态选择结构属性值:
// Your sample code
string enumString = vehicleType + pricingMethod;
Console.WriteLine("enumString value: " + enumString );
// Code to get the values
var data = typeof(Rates).GetFields().Where(x=>x.Name==enumString)
.Select(a => a.GetRawConstantValue()
.ToString()).ToArray().FirstOrDefault();
如何根据用户在运行时定义的字符串变量访问结构的属性?
我知道这并不理想。这只是一个简单的作业。
我想使用枚举,但据我所知,我不支持存储双精度类型的值。
如果有其他最佳实践,也请提出建议。
感谢您的帮助!
using System;
public struct Rates
{
public const double charterdaily = 1000;
public const double charterhourly = 400;
public const double charterdistance = 3.5;
public const double minibusdaily = 925;
public const double minibushourly = 360;
public const double minibusdistance = 3.25;
public const double sprinterdaily = 850;
public const double sprinterhourly = 320;
public const double sprinterdistance = 3;
public const double partybusdaily = 1000;
public const double partybushourly = 400;
public const double partybusdistance = 3.5;
public const double sedandaily = 7000;
public const double sedanhourly = 240;
public const double sedandistance = 2.5;
public const double suvdaily = 625;
public const double suvhourly = 200;
public const double suvdistance = 2.25;
public const double limodaily = 550;
public const double limohourly = 400;
public const double limodistance = 3.5;
}
public class Program
{
public static void Main(string[] args)
{
int numberOfVehicles;
Console.WriteLine("Enter # of vehicles: ");
numberOfVehicles = Convert.ToInt32(Console.ReadLine());
string vehicleType;
Console.WriteLine("Enter vehicle type. Values accepted: charter, minibus, sprinter, partybus, sedan, suv, limo.");
vehicleType = Console.ReadLine().ToLower();
string pricingMethod;
Console.WriteLine("Enter pricing method. Values accepted: daily, hourly, distance.");
pricingMethod = Console.ReadLine().ToLower();
double pricingMethodUnits; //double because we want to support partial mile distances
switch (pricingMethod)
{
case "daily":
Console.WriteLine("Enter number of DAYS you are renting: ");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
case "hourly":
Console.WriteLine("Enter number of HOURS you are renting:");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
case "distance":
Console.WriteLine("Enter expected DISTANCE traveled in miles: ");
pricingMethodUnits = Convert.ToDouble(Console.ReadLine());
break;
default:
Console.WriteLine("Invalid pricing method value entered");
break;
}
string enumString = vehicleType + pricingMethod;
Console.WriteLine("enumString value: " + enumString );
//this is where I want to access the Rate struct by the passed in enum string
Console.WriteLine(Rates."{enumString}");
}
}```
我建议使用 static
Dictionary<string, double>
:
private static readonly IReadOnlyDictionary<string, double> Rates =
new Dictionary<string, double>(StringComparer.OrdinalIgnoreCase) {
{ "charterdaily", 1000},
{ "charterhourly", 400},
//TODO: Add all the pairs here
};
然后就可以通过key从字典中读取值了
//this is where I want to access the Rate struct by the passed in enum string
Console.WriteLine(Rates[enumString]);
使用下面的代码行动态选择结构属性值:
// Your sample code
string enumString = vehicleType + pricingMethod;
Console.WriteLine("enumString value: " + enumString );
// Code to get the values
var data = typeof(Rates).GetFields().Where(x=>x.Name==enumString)
.Select(a => a.GetRawConstantValue()
.ToString()).ToArray().FirstOrDefault();