2

虽然 Stackoverflow 中有类似的问题,但它对我的问题没有帮助。这是我正在做的事情的总体情况。我正在为我的 iDB2DataReader 生成 IL,以从数据库中动态获取我的类型并映射到我的 poco。我在获取可空值以提取数据时遇到问题。

所以我有一个方法需要通过反射返回methodinfo。为了得到这个,我正在使用我需要的类型的“getmethod”。这是代码:

private static MethodInfo GetDataMethod(Type destinationDataType, Type underlyingDestinationDataType, iDB2DataReader reader)
{
    MethodInfo methInfo = null;

    if (_readerDataMethods.ContainsKey(destinationDataType))
    {
        methInfo = _readerDataMethods[destinationDataType];
    }
    else
    {

        if (underlyingDestinationDataType != null)
        {
            //trying to get underlying type which would be DateTime thus resulting in GetDatetime.
            methInfo = reader.GetType().GetMethod("Get" + underlyingDestinationDataType.Name);
        }
        else
            methInfo = reader.GetType().GetMethod("Get" + destinationDataType.Name);
        //methInfo = reader.GetType().GetMethod("Get" + destinationDataType.ToGenericTypeString());

        if (methInfo != null)
        {
            _readerDataMethods[destinationDataType] = methInfo;
        }
    }

    return methInfo;
}

正如您从我的代码注释中看到的那样,我得到了 datetime 的基础类型,但这不起作用,它得到一个运行时错误“操作可能使运行时不稳定。”。

真正的问题是我不知道我应该为 a 的 getmethod 使用什么名称Nullable<DateTime>。或者至少我希望它是那么简单。任何帮助,将不胜感激。

4

1 回答 1

1

您可能必须创建一个特殊情况的毛皮 Nullables,因为实际类型名称在方法名称中无效。我会检查它是否是 Nullable 类型并使用反射来获取泛型参数。

例子:

Type t = typeof (Nullable<DateTime>);

Console.WriteLine(t.Name);   // Nullable`1
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>))
{
    Type t2 = Nullable.GetUnderlyingType(t);
    Console.WriteLine("Nullable"+t2.Name); // NullableDateTime
}
于 2012-08-21T15:59:23.393 回答