8

问题

我正在尝试动态获取在 ParameterInfo 中指定的类型的默认值。_methods[methodName] 返回一个 MethodInfo 对象。

不幸的是,编译器不喜欢默认(paramType)中的“paramType”位。我难住了。

错误

找不到类型或命名空间名称“paramType”(您是否缺少 using 指令或程序集引用?)

C:\Applications\...\MessageReceiver.cs 第 113 行

例子

object blankObject = null;
foreach (var paramInfo in _methods[methodName].Key.GetParameters())
{
    if (paramInfo.Name == paramName)
    {
        Type paramType = paramInfo.ParameterType;
        blankObject = (object)default(paramType);
    }
}
parameters[i] = blankObject;
4

2 回答 2

27

实现起来非常简单:

public object GetDefault(Type type)
{
    return type.IsValueType ? Activator.CreateInstance(type) : null;
}
于 2009-01-23T22:26:40.960 回答
1

我认为 default 仅适用于实际类型。这是一个编译器快捷方式,而不是实际方法。它适用于泛型。例如:

public void MyMethod<T>(T obj)
{
   T myvar = default(T);
}

看看我不久前发布的这个问题:

泛型的默认值

于 2009-01-23T22:22:22.653 回答