【发布时间】:2010-11-15 10:09:23
【问题描述】:
我有一个对象:
ExampleClass ex = new ExampleClass();
还有:
Type TargetType
我想将 ex 转换为 TargetType 描述的类型,如下所示:
Object o = (TargetType) ex;
但是当我这样做时,我得到:
类型或命名空间名称“t”可以 找不到
那么怎么做呢?我在这里遗漏了什么吗?
更新:
我想得到这样的东西:
public CustomClass MyClassOuter
{
get
{
return (CustomClass) otherClass;
}
}
private otherClass;
因为我会有很多这样的属性,所以我想这样做:
public CustomClass MyClassOuter
{
get
{
return (GetThisPropertyType()) otherClass;
}
}
private SomeOtherTypeClass otherClass;
上下文:
通常,在我的班级中,我需要创建许多属性。并且在每一个替换转换为属性类型。这对我来说似乎没有意义(在我的上下文中),因为我知道返回类型是什么,并且我想编写某种代码来为我进行转换。也许是泛型的情况,我还不知道。
就像我可以在这个属性中保证我得到了正确的对象和正确的类型,并且能够 100% 地将它转换为属性类型。
我需要这样做,这样我就不需要在每个属性中指定它必须“将值转换为 CustomClass”,我想做类似“将值转换为与此属性相同的类” ”。
例如:
class MYBaseClass
{
protected List<Object> MyInternalObjects;
}
class MyClass
{
public SpecialClass MyVeryOwnSpecialObject
{
get
{
return (SpecialClass) MyInteralObjects["MyVeryOwnSpecialObject"];
}
}
}
好的——我可以制作很多像上面这样的属性——但是有两个问题:
1) 我需要在 MyInternalObjects 上指定对象的名称,但它与属性名称相同。我用 System.Reflection.MethodBase.GetCurrentMethod().Name 解决了这个问题。
2) 在每个属性中,我需要将对象从 MyInternalObjects 转换为不同的类型。例如在 MyVeryOwnSpecialObject 中 - 到 SpecialClass。它总是与属性相同的类。
这就是为什么我想做这样的事情:
class MYBaseClass
{
protected List<Object> MyInternalObjects;
}
class MyClass
{
public SpecialClass MyVeryOwnSpecialObject
{
get
{
return (GetPropertyType()) MyInteralObjects[System.Reflection.MethodBase.GetCurrentMethod().Name];
}
}
}
现在关心的是:好的,为什么?因为在我的应用程序中,我将获得安全类型等的所有好处(智能感知)。
第二个:但是现在你会在这个地方失去类型安全?不,因为我很确定我的对象在列表中。
【问题讨论】:
-
我已更新我的答案以回应您的编辑。我怀疑我们需要看一个完整的示例才能使这个问题有意义。
-
“它总是与属性相同的类” - 所以将它转换为那个类型!您在编译时就知道该类型;为什么要做其他事情?只是为了省点打字?
-
如果您开箱即用,您会看到这样做的好处
-
不,除了让剪切和粘贴更容易之外,我没有看到其他好处。请解释您认为有哪些好处。请注意,如果您只想使用工具生成这些属性,则可以非常轻松地直接使用正确的类型等。
-
(我不是在谈论拥有强类型属性的好处——这很好。我说的是当你实际上静态地知道它时动态查找名称和类型的好处。)