【问题标题】:Cannot convert from string to class无法从字符串转换为类
【发布时间】:2020-10-04 21:34:02
【问题描述】:

我创建了以下具有常量属性的类,因此我可以将其用作某种枚举。

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: Argument 2: cannot convert from 'string' to 'class.Enum.Interval'.'

var foo = new fooClass();
var fooMethod = fooClass.GetInfo("Example", Interval.OneWeek);

为什么会出现此错误以及如何解决?

【问题讨论】:

  • 你能显示 fooClass.GetInfo 的代码吗?该错误涉及涉及的枚举,但我在这里看不到任何枚举

标签: c# string constants


【解决方案1】:

假设调用实际上是:

fooClass.GetSpark("Example", Interval.OneWeek);

您使用两个字符串作为参数调用此方法:“Example”和“1wk”(Interval 中定义的 const 字符串)。 GetSpark 方法实际上需要一个字符串和一个 Interval 类,这不是您提供的。

所以将您的 GetSpark 方法重写为:

public IRestResponse GetSpark(string symbol, string interval)
{
  var url = $"https://...?interval={interval}";
  return RestAPI.RestCall(url);
}

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

注意。 你的问题有不一致的地方(第二个代码sn-p中的方法名是GetSpark,但是你在第三个sn-p中调用了GetInfo

该方法需要类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()}";

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2021-10-09
相关资源
最近更新 更多