C# 将动态对象的字段作为参数传递

C# 将动态对象的字段作为参数传递,c#,dynamic,C#,Dynamic,我有一个动态对象,它由NewtonsoftJson序列化 var data = JsonConvert.DeserializeObject<dynamic>(settings); 我得到编译错误 错误82开关表达式或大小写标签必须是bool、char、string、integral、enum或相应的可空类型 这不是问题,我只要加上演员阵容就行了 switch ((string)item.name) 现在它编译了。但我得到异常,运行时错误 CS1502:与“System.DateT

我有一个动态对象,它由NewtonsoftJson序列化

var data = JsonConvert.DeserializeObject<dynamic>(settings);
我得到编译错误

错误82开关表达式或大小写标签必须是bool、char、string、integral、enum或相应的可空类型

这不是问题,我只要加上演员阵容就行了

switch ((string)item.name)
现在它编译了。但我得到异常,运行时错误

CS1502:与“System.DateTime.TryParse(string,out System.DateTime)\”匹配的最佳重载方法具有一些无效参数

我不清楚为什么它不包含像switch这样的编译错误,而我不这样强制转换它

DateTime.TryParse((string)item.value, out minDate);
?

注意,
item.value
的类型是
Newtonsoft.Json.Linq.JValue


谢谢

也许还可以投下物品。价值

        var minDate = DateTime.MinValue;
        var maxDate = DateTime.MaxValue;
        foreach (var item in data)
        {
            switch (item.name)
            {
                case CustomFieldConstants.MinDate:
                    DateTime.TryParse((string)item.value, out minDate);
                    break;
                case CustomFieldConstants.MaxDate:
                    DateTime.TryParse((string)item.value, out maxDate);
                    break;
            }
        }
编辑:哦,对不起,我一开始误解了你的问题

CS1502不是运行时错误。这是一个编译错误:

您不会得到异常(运行时错误),而是一个编译错误,告诉您传递的参数类型错误


因此,它与开关相同,只是不同的错误。

我将按如下方式使用它:

JArray tokens = JArray.Parse(value);
foreach (JToken token in tokens)
{
    string name = token.Value<string>("name");
    DateTime theDate = DateTime.MinValue;
    DateTime.TryParse(token.Value<string>("value"), out theDate);
}
JArray令牌=JArray.Parse(值);
foreach(令牌中的JToken令牌)
{
字符串名称=token.Value(“名称”);
DateTime theDate=DateTime.MinValue;
DateTime.TryParse(token.Value(“Value”),超出日期);
}

是的,我知道,问题不在于它,谢谢,我明白了,谢谢,看起来它是一个开关规范,接受bool、char、string、integral、enum或相应的可空类型,但不是动态的,但它不会在编译时检查类型,正如您前面所说的,因为可能有任何类型我不想得到异常,如果在这种情况下,值不正确,请将TryParse与token.value(“value”)一起使用,如果使用
item.value.value
,会发生什么情况?
JArray tokens = JArray.Parse(value);
foreach (JToken token in tokens)
{
    string name = token.Value<string>("name");
    DateTime theDate = DateTime.MinValue;
    DateTime.TryParse(token.Value<string>("value"), out theDate);
}