无法从字符串转换为 class
Cannot convert from string to class
我创建了以下 class 具有常量属性,因此我可以将其用作某种枚举。
public class Interval
{
public const string FiveMinutes = "5m";
public const string FifteenMinnutes = "15m";
public const string OneDay = "1d";
public const string OneWeek = "1wk";
public const string OneMonth = "1mo";
}
方法的内容需要Interval
。
public IRestResponse GetSpark(string Symbol, Interval Interval)
{
var url = $"https://...?interval={Interval}";
return RestAPI.RestCall(url);
}
使用 Interval.OneWeek
时出现错误“CS1503:参数 2:无法从 'string' 转换为 'class.Enum.Interval'。”
var foo = new fooClass();
var fooMethod = fooClass.GetInfo("Example", Interval.OneWeek);
为什么会出现此错误以及如何解决?
假设调用实际上是:
fooClass.GetSpark("Example", Interval.OneWeek);
您使用两个字符串作为参数调用此方法:“Example”和“1wk”(Interval 中定义的常量字符串)。 GetSpark 方法实际上需要一个字符串和一个间隔 class,这不是您提供的。
因此将您的 GetSpark 方法重写为:
public IRestResponse GetSpark(string symbol, string interval)
{
var url = $"https://...?interval={interval}";
return RestAPI.RestCall(url);
}
注.
你的问题不一致(第二个代码片段中的方法名称是GetSpark
,但你在第三个代码片段中调用了GetInfo
)
该方法需要 class Interval
,但您只传递了 Interval
的 string
值常量。要么更改方法签名以接受 string
而不是 Interval
public IRestResponse GetSpark(string Symbol, string Interval)
或将 Interval
替换为 enum
public enum Interval
{
[Display(Name = "5m")]
FiveMinutes,
[Display(Name = "15m")]
FifteenMinutes,
[Display(Name = "1d")]
OneDay,
[Display(Name = "1wk")]
OneWeek,
[Display(Name = "1mo")]
OneMonth,
}
您可以使用此扩展方法来检索显示名称(感谢 this answer):
public static class Extensions
{
public static string GetEnumDisplayName(this Enum enumType)
{
return enumType.GetType().GetMember(enumType.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.Name;
}
}
并将第一行替换为:
var url = $"https://...?interval={Interval.GetEnumDisplayName()}";
我创建了以下 class 具有常量属性,因此我可以将其用作某种枚举。
public class Interval
{
public const string FiveMinutes = "5m";
public const string FifteenMinnutes = "15m";
public const string OneDay = "1d";
public const string OneWeek = "1wk";
public const string OneMonth = "1mo";
}
方法的内容需要Interval
。
public IRestResponse GetSpark(string Symbol, Interval Interval)
{
var url = $"https://...?interval={Interval}";
return RestAPI.RestCall(url);
}
使用 Interval.OneWeek
时出现错误“CS1503:参数 2:无法从 'string' 转换为 'class.Enum.Interval'。”
var foo = new fooClass();
var fooMethod = fooClass.GetInfo("Example", Interval.OneWeek);
为什么会出现此错误以及如何解决?
假设调用实际上是:
fooClass.GetSpark("Example", Interval.OneWeek);
您使用两个字符串作为参数调用此方法:“Example”和“1wk”(Interval 中定义的常量字符串)。 GetSpark 方法实际上需要一个字符串和一个间隔 class,这不是您提供的。
因此将您的 GetSpark 方法重写为:
public IRestResponse GetSpark(string symbol, string interval)
{
var url = $"https://...?interval={interval}";
return RestAPI.RestCall(url);
}
注.
你的问题不一致(第二个代码片段中的方法名称是GetSpark
,但你在第三个代码片段中调用了GetInfo
)
该方法需要 class Interval
,但您只传递了 Interval
的 string
值常量。要么更改方法签名以接受 string
而不是 Interval
public IRestResponse GetSpark(string Symbol, string Interval)
或将 Interval
替换为 enum
public enum Interval
{
[Display(Name = "5m")]
FiveMinutes,
[Display(Name = "15m")]
FifteenMinutes,
[Display(Name = "1d")]
OneDay,
[Display(Name = "1wk")]
OneWeek,
[Display(Name = "1mo")]
OneMonth,
}
您可以使用此扩展方法来检索显示名称(感谢 this answer):
public static class Extensions
{
public static string GetEnumDisplayName(this Enum enumType)
{
return enumType.GetType().GetMember(enumType.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.Name;
}
}
并将第一行替换为:
var url = $"https://...?interval={Interval.GetEnumDisplayName()}";