我需要一种方法将对象强制转换为编译时不知道的类型。
类似的东西:
object obj;
public (type of obj) Obj
{
get
{
return obj
}
set
{
obj = (type of obj)value;
}
}
唯一知道的是obj是一种值类型。
我怀疑这样的事情是可能的。只是检查某人是否有巧妙的方法。
答案 0 :(得分:6)
这在C#3.0中是不可能的,但是如果你可以定义一个所有对象实现的公共接口,你可以转换为。
在C#4.0中,我们将获得允许我们进行Duck Typing的dynamic
关键字。
答案 1 :(得分:4)
这样的演员阵容实际上不会做任何事情,因为你在后面分配一个带有更宽松类型的变量。您最好的方法取决于您在“强制转换”它之后要对值类型执行的操作。
选项包括:
dynamic
输入。switch
或if .. else
。编辑实际上并不能解决您的问题,但您的示例并未说明您的类的实际用法,因此它可能是我误解了你的意图。像这样的东西可能实际上是你正在寻找的东西:
class MyClass<T> where T: struct
{
T obj;
public T Obj
{
get { return obj; }
set { obj = value; }
}
}
MyClass<int> test = new MyClass<int>();
test.Obj = 1;
实际的类型定义现在在您的类之外,作为泛型类型参数。严格地说,类型仍然是静态的,因为它在编译时是已知的。
答案 2 :(得分:4)
嗯,你可以用泛型来做到这一点:
public class IAcceptValueTypes<T> where T: struct
private T obj;
public T Obj
{
get { return obj; }
set { obj = value; }
}
通用约束where T: struct
会将可接受的类型限制为值类型。
答案 3 :(得分:1)
你为什么需要这种铸造?
答案 4 :(得分:1)
我目前没有在我面前试用Visual Studio,但你为什么不抬头看看: