C#系统.Double&;到系统.双重的

本文关键字:系统 amp Double | 更新日期: 2023-09-27 17:58:17

我有一个类型变量t,其值表示引用,例如System。Double&或系统。双[]&。。现在我想创建一个类型为System的对象实例。Double或System。双[]。。。

问题编辑:

        Type t = param.ParameterType;
        if (t == Type.GetType("System.String&"))
            return Activator.CreateInstance(Type.GetType("System.String"), new object[] { new char[] { ' ' } });
        if (t == Type.GetType("System.Double[]&"))
            return Activator.CreateInstance(Type.GetType("System.Dobule[]"), new object[] { 10 }); // throw Error !!!!
        else
            return Activator.CreateInstance(t.GetElementType());

编辑2:我想实现这样的东西:

Type t = param.ParameterType;
if t is a reference to an array of any dimensions -> create its instance
if t is a ref to string -> create its instance
if t is a ref to any other data types -> create its instance

C#系统.Double&;到系统.双重的

与号&可能来自类型的CLR名称。它表示它是该类型的ByRef版本。您是否从用refout关键字修饰的方法参数中获得了带有反射的Type

示例:

var t1 = typeof(double);
Console.WriteLine(t1);        // "System.Double"
var t2 = t1.MakeByRefType();
Console.WriteLine(t2);        // "System.Double&"
var t3 = t2.GetElementType();
Console.WriteLine(t3);        // "System.Double"
Console.WriteLine(t1 == t3);  // "True"

对于一个带有ref关键字的示例,假设您有一个方法(在类型Program中),如下所示:

public static bool TestMethod(ref double d)
{
  return true;
}

然后你可以做:

var t4 = typeof(Program).GetMethod("TestMethod").GetParameters()[0].ParameterType;
Console.WriteLine(t4);        // "System.Double&"

同样,您可以使用GetElementType()删除&

与数组类型相同,也可以是ByRef,也可以不是。


编辑后添加:

我强烈建议您使用typeof(string[]),而不是例如Type.GetType("System.String[]")。使用C#关键字typeof要安全得多。

如果你想去掉任何"尾随和符",也就是说,如果你想删除"ByRef",你可以说:

Type t = param.ParameterType;
if (t.IsByRef)
    t = t.GetElementType();

最后,出现运行时异常的原因似乎是Dobule的拼写错误。typeof(double)不会发生这种情况(编译时会检查拼写)。

说起来容易得多:

return " ";

而不是您的:

return Activator.CreateInstance(Type.GetType("System.String"), new object[] { new char[] { ' ' } });

并说:

return new double[10];

而不是您的:

return Activator.CreateInstance(Type.GetType("System.Double[]"), new object[] { 10 }); // spelling error fixed

为什么一切都那么间接?