无法从字符串转换为 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,但您只传递了 Intervalstring 值常量。要么更改方法签名以接受 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()}";