代码之家  ›  专栏  ›  技术社区  ›  Ian R. O'Brien Mamedov

检查对象的类型,其中对象可以是int(32或64)

  •  0
  • Ian R. O'Brien Mamedov  · 技术社区  · 14 年前

    我想转让财产 我的财产 .

    MyProperty属性的类型为Object,它可以是Int32或Int64。

    如何检查MyProperty字段的类型,然后根据基础类型将其id或id转换为int?

    public void MyMethod(long id) {
        myClass.MyProperty
            = (typeof(MyProperty) == typeof(long))
            ? id
            : (int)id;
    }
    
    4 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

    所以你想根据当前值的类型分配新值?如果是:

    if (myClass.MyProperty is int)
    {
        myClass.MyProperty = (int) id;
    }
    else
    {
        myClass.MyProperty = id;
    }
    

    你呢 可以 使用条件表达式执行此操作,但有点难看:

    myClass.MyProperty = myClass.MyProperty is int 
        ? (object) id : (int) id;
    

    或:

    myClass.MyProperty = myClass.MyProperty is int 
        ? (object) (int) id : id;
    

    或者说你真的,真的想要拳击:

    myClass.MyProperty = myClass.MyProperty is int 
        ? (object) (int) id : (object) id;
    
        2
  •  2
  •   kemiller2002    14 年前

    你可以做:

    if(myClass.MyProperty is int){
    .....  do int stuff
    }
    else
    {
     ..... do long stuff.
    }
    

    Is Operator.

        3
  •  1
  •   simendsjo    14 年前

    long l = 2147483648; // int.MaxValue + 1
    int i = (int)l; // i == -2147483648 oops
    i = Convert.ToInt32(l); // Overflow exception
    
        4
  •  0
  •   Stilgar    14 年前

    这个问题没有道理。 1.如果属性是一个对象,您可以指定任何您想要的。对象属性的类型是object。 2.如果您想查看底层的私有字段。。。你怎么知道有一个潜在的领域开始?如果你知道有一个私人领域,为什么你不知道它的类型?

    如果你是在非常奇怪的第二种情况下,你可以做两件事。 a) 在属性中实现代码以执行检查和转换。 b) 用包含底层字段元数据的属性装饰属性,并通过反射读取它。