gpt4 book ai didi

c# - 在 C# 中将泛型对象转换回原始对象

转载 作者:行者123 更新时间:2023-11-30 14:34:53 24 4
gpt4 key购买 nike

我在 C# 中从泛型转换回原始对象时遇到问题

private static bool OpenForm<T>( )
{
List<T> list = FormManager.GetListOfOpenForms<T>();
if ( list.Count == 0 )
{
// not opened
return false;
}
else
{
// opened
foreach ( T f in list )
{
T ff = ( T ) Convert.ChangeType( f, typeof( T ) );

如果我输入 ff。智能感知会弹出几个方法和属性。

我怎样才能在这里有一个变量,它暴露了 ff 的所有属性和方法

        }
return true;
}
}

最佳答案

因为它是一个泛型方法,T 可以是任何类型,直到一个简单的对象。编译器 - 以及智能感知引擎 - 直到运行时才知道 T 是什么。请注意,这当然是您想要的行为,也是您首先使用泛型的原因。在这种情况下,使用静态类型,无法在反射之外访问 T 的成员。

现在我相信您正在寻找的是一个约束,也就是说所有 T总是是某种基本类型。例如,如果所有 T 都是 Form,您可以对该方法施加约束,然后访问 Form 的成员:

private static bool OpenForm<T>() where T : Form
{
List<T> list = FormManager.GetListOfOpenForms<T>();
if ( list.Count == 0 )
{
// not opened
return false;
}
else
{
// opened
foreach ( T f in list )
{
f.Text = "You found me!";
}
}
}

请注意,我省略了从 T fT ff 的转换,因为它什么都不做。

关于c# - 在 C# 中将泛型对象转换回原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com