使用Reflection确定如何在方法内部转换对象

时间:2014-01-02 17:36:54

标签: c# reflection casting implicit assign

如何使用Reflection来确定方法内部对象的投射方式?

示例:

给定此类型,可以隐式转换并指定为int,float或string:

public class VersatileType {

    public int intVal = 10;
    public float floatVal = 1.5f;
    public string stringVal = "words";

    // implicit convertions

    // ints
    public static implicit operator int(VersatileType vt) {
        return vt.intVal;
    }

    public static implicit operator VersatileType(int val) {
        VersatileType vt = new VersatileType();
        vt.intVal = val;
        return vt;
    }

    // floats
    public static implicit operator float(VersatileType vt) {
        return vt.floatVal;
    }

    public static implicit operator VersatileType(float val) {
        VersatileType vt = new VersatileType();
        vt.floatVal = val;
        return vt;
    }

    // strings
    public static implicit operator string(VersatileType vt) {
        return vt.stringVal;
    }

    public static implicit operator VersatileType(string val) {
        VersatileType vt = new VersatileType();
        vt.stringVal = val;
        return vt;
    }
}

给定方法执行一些隐式转换和赋值:

public VersatileType obj;

public void CastAndAssignObj() {

    obj = 0;
    string text = obj;
}

有没有办法使用Reflection(或任何其他过程)来确定如何从CastAndassignObj()内投射/分配“obj”?

我想最终得到一个包含类型 int string 的集合,用于上述示例。

非常感谢 -

1 个答案:

答案 0 :(得分:0)

反射在这里没有用,因为它总是会产生VersatileType,并且有3个string类型的属性,intfloat反射不会告诉你正在使用哪一个。我认为做你想做的最简单的方法是添加一个标志(isInt,isFloat,isString)或者停止初始化这些值,这样你就可以说

   if (myVersatileType.StringVal != null)
       // guess we're a string

您不能使用反射,因为它不会创建不同的类型。只有一种类型,它有三个值,只使用其中一种。