【问题标题】:Check if dynamic object is single value or array in c#在c#中检查动态对象是单值还是数组
【发布时间】:2015-11-19 16:35:52
【问题描述】:

检查动态对象是 Array 还是 string/int/etc 的最佳方法是什么?

这是我的解决方案,可行,但我不确定 try/cach 解决方案是否是最好的方法。

我也尝试过使用.GetType() 方法获取Type,但没有奏效。

List<object> 应该包含简单的数据类型,可以转换为字符串。

private Dictionary<string, List<object>> GetValues(List<dynamic> dynamicList)
{
    Dictionary<string, List<object>> returnDictionary;
    returnDictionary= new Dictionary<string, List<object>>();

    foreach (dynamic item in dynamicList)
    {
        var name = item.Name;
        dynamic value = item.Value;

        try
        {
            string sValue = (string)value;
            returnDictionary.Add(item.Name, new List<object> { sValue });
        }
        catch
        {
            returnDictionary.Add(item.Name, new List<object>((IEnumerable<object>)value));
        }
    }

    return returnDictionary;
}

【问题讨论】:

  • “但没用”并没有告诉我们您所看到的任何信息。 GetType() 会给你类型,但我们不知道你试图做什么或发生了什么。如果你想让一个值 castable 到字符串,那么你应该只填充一个 List&lt;string&gt;...
  • 您应该在 C# 中使用反射 ...检查是否(A 是某种类型),然后将其转换为该类型
  • List&lt;dynamic&gt; 是反序列化 Json 的一部分。 .GetType() 方法返回 Name="JValue" FullName="Newtonsoft.Json.Linq.JValue"
  • 我找到了一个解决方案来检查它是否是一个字符串。 if(value.Type == Newtonsoft.Json.Linq.JTokenType.String)

标签: .net


【解决方案1】:

尝试使用“as”关键字。

string sValue = value as string;
if(sValue != null) {
    //do stuff
}

【讨论】:

    【解决方案2】:

    使用 is 关键字

    if(value is string)
    {
        string StrVal = value as string; 
    }
    

    【讨论】:

    • 这个答案看起来是正确的,但要使其成为“高质量的答案”,您应该解释 is 运算符及其工作原理。
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多