C# 如何在C中的创建块内检查一行中的变量类型#

C# 如何在C中的创建块内检查一行中的变量类型#,c#,C#,我正在创建一个自定义Json到对象的转换,因为我需要根据一个JToken是字符串还是整数来处理它。但是,我不确定如何以简洁明了的方式获得解析 代码: 公共类MyClass { 公共int Id{get;set;} 公共字符串SomeOtherDataPoint{get;set;} } public int CreateNewIntIdBasedOnString(字符串stringId) { //一些代码 } 公共IEnumerable ConvertJarrayTomyObject(JArray

我正在创建一个自定义Json到对象的转换,因为我需要根据一个JToken是字符串还是整数来处理它。但是,我不确定如何以简洁明了的方式获得解析

代码:

公共类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"),
        });
}