相关疑难解决方法(0)

如何检测对象是否为通用集合,以及它包含哪些类型?

我有一个字符串序列化实用程序,它接受(几乎)任何类型的变量并将其转换为字符串.因此,例如,根据我的惯例,整数值123将被序列化为"i:3:123"(i =整数; 3 =字符串的长度; 123 =值).

该实用程序处理所有原始类型,以及一些非泛型集合,如ArrayLists和Hashtables.界面是这种形式

public static string StringSerialize(object o) {}

在内部我检测对象是什么类型并相应地序列化它.

现在我想升级我的实用程序来处理泛型集合.有趣的是,我找不到一个合适的函数来检测对象是一个泛型集合,它包含哪些类型 - 我需要哪些信息才能正确序列化.到目前为止,我一直在使用表单的编码

if (o is int) {// do something}

但这似乎不适用于泛型.

您有什么推荐的吗?


编辑:感谢Lucero,我已经接近答案了,但我仍然坚持这个小小的语法难题:

if (t.IsGenericType) {
  if (typeof(List<>) == t.GetGenericTypeDefinition()) {
    Type lt = t.GetGenericArguments()[0];
    List<lt> x = (List<lt>)o;
    stringifyList(x);
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码无法编译,因为" lt"不允许作为对象的<T>参数List<>.为什么不?什么是正确的语法?

c# generics typechecking

10
推荐指数
2
解决办法
4516
查看次数

标签 统计

c# ×1

generics ×1

typechecking ×1