【问题标题】:Dynamically getting default of a parameter type动态获取参数类型的默认值
【发布时间】:2010-10-03 06:08:17
【问题描述】:

问题

我正在尝试动态获取在 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;

【问题讨论】:

    标签: c# reflection dynamic


    【解决方案1】:

    实现起来相当简单:

    public object GetDefault(Type type)
    {
        return type.IsValueType ? Activator.CreateInstance(type) : null;
    }
    

    【讨论】:

    • 谢谢哥们。很高兴有名人回答我的问题。 :) Repped。
    • 别太追星了。他回答了每个人的问题! :)
    【解决方案2】:

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

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

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

    Default Value for Generics

    【讨论】:

    • 对...我已经将它与泛型一起使用了很多,但现在我需要从 ParameterInfo 中获取它。当然有办法通过反射或其他方式做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多