如何使用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
的集合,用于上述示例。
非常感谢 -
答案 0 :(得分:0)
反射在这里没有用,因为它总是会产生VersatileType
,并且有3个string
类型的属性,int
和float
反射不会告诉你正在使用哪一个。我认为做你想做的最简单的方法是添加一个标志(isInt,isFloat,isString)或者停止初始化这些值,这样你就可以说
if (myVersatileType.StringVal != null)
// guess we're a string
您不能使用反射,因为它不会创建不同的类型。只有一种类型,它有三个值,只使用其中一种。