C# 如何在C中的创建块内检查一行中的变量类型#
我正在创建一个自定义Json到对象的转换,因为我需要根据一个JToken是字符串还是整数来处理它。但是,我不确定如何以简洁明了的方式获得解析 代码:C# 如何在C中的创建块内检查一行中的变量类型#,c#,C#,我正在创建一个自定义Json到对象的转换,因为我需要根据一个JToken是字符串还是整数来处理它。但是,我不确定如何以简洁明了的方式获得解析 代码: 公共类MyClass { 公共int Id{get;set;} 公共字符串SomeOtherDataPoint{get;set;} } public int CreateNewIntIdBasedOnString(字符串stringId) { //一些代码 } 公共IEnumerable ConvertJarrayTomyObject(JArray
公共类MyClass
{
公共int Id{get;set;}
公共字符串SomeOtherDataPoint{get;set;}
}
public int CreateNewIntIdBasedOnString(字符串stringId)
{
//一些代码
}
公共IEnumerable ConvertJarrayTomyObject(JArray数组)
{
返回array.Select(d=>newmyclass(){
Id=((JObject)d).GetValue(“Id”)==int?((JObject)d).GetValue(“Id”):CreateNewIntIdBasedOnString((string)((JObject)d).GetValue(“Id”),
SomeOtherDataPoint=(字符串)((JObject)d).GetValue(“SomeOtherDataPoint”)
});
}
((JObject)d).GetValue(“id”)==int
不是一个东西,所以我需要类似于int.TryParse
的东西,它在一行上工作。我可以为它创建一个方法,但这似乎很奇怪,因为它不够普遍,没有一个标准化的方法来实现它。我认为试图将所有内容都保存在一个表达式中是错误的方法——你最终会不必要地重复自己
如果我正确地解释了你想要的,我会这样写:
public static IEnumerable<MyClass> ConvertJArrayToMyObjects(JArray array)
{
return array.Values<JObject>().Select(d =>
{
var id = d.Value<string>("id");
return new MyClass()
{
Id = int.TryParse(id, out var intId) ? intId : CreateNewIntIdBasedOnString(id),
SomeOtherDataPoint = d.Value<string>("someOtherDataPoint"),
};
});
}
我认为试图把所有的东西都放在一个表达式中是错误的做法——你最终会不必要地重复自己 如果我正确地解释了你想要的,我会这样写:
public static IEnumerable<MyClass> ConvertJArrayToMyObjects(JArray array)
{
return array.Values<JObject>().Select(d =>
{
var id = d.Value<string>("id");
return new MyClass()
{
Id = int.TryParse(id, out var intId) ? intId : CreateNewIntIdBasedOnString(id),
SomeOtherDataPoint = d.Value<string>("someOtherDataPoint"),
};
});
}
你在找
JToken.TokenType
可能吗?int.TryParse
只在一行上工作我遇到过JSON,其中一些数字属性是数字,一些是字符串。但是,如果同一属性有时是数字,有时是字符串,那么理想情况下,您应该修复JSON。@Tc_u您是否试图查看属性值是数字(myProp:10
)还是表示数字的字符串(myProp:“10”
)?@Magnetron我正在接收一个字符串,在某些情况下可以解析为int,但有时不能。你在找JToken.TokenType
也许?int.TryParse
只在一行上工作我遇到过JSON,其中一些数字属性是数字,一些是字符串。但是,如果同一属性有时是数字,有时是字符串,那么理想情况下,您应该修复JSON。@Tc_u您是否试图查看属性值是数字(myProp:10
)还是表示数字的字符串(myProp:“10”
)?@Magnetron我正在接收一个字符串,在某些情况下可以解析为int,但有时不能。
public static IEnumerable<MyClass> ConvertJArrayToMyObjects(JArray array)
{
return array.Values<JObject>().Select(d =>
new MyClass()
{
Id = d.Value<string>("id") is var id && int.TryParse(id, out var intId) ? intId : CreateNewIntIdBasedOnString(id),
SomeOtherDataPoint = d.Value<string>("someOtherDataPoint"),
});
}