Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用类型定义新变量_C# - Fatal编程技术网

C# 使用类型定义新变量

C# 使用类型定义新变量,c#,C#,我想知道是否可以使用Type将对象转换回其原始类型。 我现在有这样的代码,但这不起作用。我在互联网上看过,但我得到的是泛型类型的方法,如下图所示 public static T method<T>(string name) { return (T)objects[name]; } public static dynamic GetObject(string name) { Type t = objects[name].GetType(); t test = (t

我想知道是否可以使用
Type
将对象转换回其原始类型。 我现在有这样的代码,但这不起作用。我在互联网上看过,但我得到的是泛型类型的方法,如下图所示

public static T method<T>(string name)
{
    return (T)objects[name];
}
public static dynamic GetObject(string name)
{
   Type t = objects[name].GetType();
   t test = (t)objects[name]; <--- Is it possible to do something like this?
}
publicstatict方法(字符串名)
{
返回(T)个对象[名称];
}
但我在找这样的东西

public static T method<T>(string name)
{
    return (T)objects[name];
}
public static dynamic GetObject(string name)
{
   Type t = objects[name].GetType();
   t test = (t)objects[name]; <--- Is it possible to do something like this?
}
publicstaticdynamicgetobject(字符串名)
{
类型t=objects[name].GetType();

t test=(t)objects[name];如果要将命名对象作为
dynamic
返回,则不需要该类型。只需返回它,运行时绑定将为您处理此问题(或在运行时引发异常)


您可以使用反射创建绑定的泛型
类型
,将特定的
类型
作为类型参数。完成此操作后,您可以使用
Activator.CreateInstance
创建该类型的实例。您创建的泛型类型可以基于纯粹为此类型定义的开放泛型类pose,因为它可以对类型
T
执行它想要的任何操作。请注意,如果
T
对它有约束,如果尝试的类型参数不满足这些约束,则创建泛型类型的尝试将失败。

如果不进行反射,就无法获得此结果,这意味着您a)被卡住了n反射将永远停留在使用返回值的范围内,或者b)使用
动态
,让编译器在幕后完成这项工作。即使在后一种情况下,反射(和运行时计算)的污点也会扩散到与返回值接触的任何东西上,因此IMHO“找到另一种编写代码的方法”是比“使用<代码>动态”更好的经验法则。是的,这非常有效。非常感谢。我已经为此奋斗了几个小时。