【问题标题】:Trying to get the generic type from PropertyInfo [duplicate]试图从 PropertyInfo 获取泛型类型 [重复]
【发布时间】:2018-08-22 22:17:35
【问题描述】:

首先让我说,我知道“PropertyType”属性。

所以我一直在使用通用转换器。

用法很简单;它看起来像这样:

int1 = TConverter.ChangeType<int>(strt1);

这样字符串就变成了 int (如果可以的话)。以上工作正常。然而,问题在于列出类型的尖括号之间的部分。我想在那里获取 PropertyInfo 的类型,但我看不到。

我已经简化为主要问题的代码如下所示:

foreach (PropertyInfo pi in props)
        {
            Type tp = pi.PropertyType;

            var converted = TConverter.ChangeType<tp>("Test");
        }

我想我一定是弄错了,因为尖括号的内容有问题。我收到此消息:“错误 2 找不到类型或命名空间名称 'tp'(您是否缺少 using 指令或程序集引用?)”

有人可以提供解决方案吗?

【问题讨论】:

  • 看起来你正在尝试这样做:stackoverflow.com/questions/5961816/…
  • 当你作为泛型的消费者编写代码时,你需要知道你在编译时提供的类型(事实上,在编译时,编译器必须决定converted 的类型,因为这就是var 的意思)。这意味着您需要提供编译时类型或自己是通用类型并传递一些 your 类型参数。

标签: c# generics reflection


【解决方案1】:

您必须动态构建泛型方法的实例:

MethodInfo openChangeType = typeof(TConverter).GetMethod(nameof(TConverter.ChangeType));
MethodInfo closedChangeType = method.MakeGenericMethod(tp);
closedChangeType.Invoke(obj: null, "Test");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多