Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# Compact Framework—如何在没有默认构造函数的情况下动态创建类型?_C#_Reflection_Compact Framework - Fatal编程技术网

C# Compact Framework—如何在没有默认构造函数的情况下动态创建类型?

C# Compact Framework—如何在没有默认构造函数的情况下动态创建类型?,c#,reflection,compact-framework,C#,Reflection,Compact Framework,我正在使用.NETCF3.5。我要创建的类型没有默认构造函数,因此我要将字符串传递给重载构造函数。我该怎么做 代码: 看看这是否适合您(未经测试): 如果类型有多个构造函数,那么您可能需要做一些花哨的工作来找到接受字符串参数的构造函数 编辑:刚刚测试了代码,它可以工作 Edit2:显示了我刚才所说的奇特的步法!;-) 好的,这里有一个时髦的助手方法,可以让您灵活地激活给定参数数组的类型: static object GetInstanceFromParameters(Assembly a, st

我正在使用.NETCF3.5。我要创建的类型没有默认构造函数,因此我要将字符串传递给重载构造函数。我该怎么做

代码:

看看这是否适合您(未经测试):

如果类型有多个构造函数,那么您可能需要做一些花哨的工作来找到接受字符串参数的构造函数

编辑:刚刚测试了代码,它可以工作


Edit2:显示了我刚才所说的奇特的步法!;-)

好的,这里有一个时髦的助手方法,可以让您灵活地激活给定参数数组的类型:

static object GetInstanceFromParameters(Assembly a, string typeName, params object[] pars) 
{
    var t = a.GetType(typeName);

    var c = t.GetConstructor(pars.Select(p => p.GetType()).ToArray());
    if (c == null) return null;

    return c.Invoke(pars);
}
你这样称呼它:

Foo f = GetInstanceFromParameters(a, "SmartDeviceProject1.Foo", "hello", 17) as Foo;
因此,将程序集和类型名称作为前两个参数传递,然后按顺序传递所有构造函数的参数

MyObj o = null;
Assembly a = Assembly.LoadFrom("my.dll");
Type t = a.GetType("type info here");

ConstructorInfo ctor = t.GetConstructor(new Type[] { typeof(string) });
if(ctor != null)
   o = ctor.Invoke(new object[] { s });
static object GetInstanceFromParameters(Assembly a, string typeName, params object[] pars) 
{
    var t = a.GetType(typeName);

    var c = t.GetConstructor(pars.Select(p => p.GetType()).ToArray());
    if (c == null) return null;

    return c.Invoke(pars);
}
Foo f = GetInstanceFromParameters(a, "SmartDeviceProject1.Foo", "hello", 17) as Foo;