【问题标题】:Casting by generic arguments通过泛型参数强制转换
【发布时间】:2014-01-17 18:53:56
【问题描述】:

我正在尝试使用 C# 中的泛型参数来转换对象,例如 (foo<mypara>)obj 其中mypara 是一个通用参数。

public class foo<T>
{
   public string name {get;set;}
    public func<T> value {get;set;}
}

var mypara = myfoo.GetType().GetGenericArguments();

其中mypara.Name 的值为"int""string",实际上是该类型的字符串表示。

但是我怎样才能得到真正的 mypara 类型呢?

【问题讨论】:

  • 添加一些代码解释不能伤害
  • 请添加一个简单的示例来说明您的问题,很抱歉,我无法理解您的要求。
  • obj as foo&lt;mypara&gt; 是一种更好的语法。 msdn.microsoft.com/en-us/library/cc488006.aspx
  • 张贴你正在执行演员的代码。

标签: c# types casting


【解决方案1】:

代码示例会有所帮助,但我认为您需要的只是obj.GetType()?这就是您获取对象类型的方式。

【讨论】:

    【解决方案2】:

    使用反射。任何对象上的 GetType() 都将获取类型的名称。需要更多反射才能使其成为对象类型。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      if (value != null)
      {
          if (value.GetType().IsGenericType == true
              && value.GetType().GetGenericArguments().Length >= 0)
          {
              IList _valuesList = null;
      
              if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("int"))
              {
                  _valuesList = value as List<int>;
              }
              else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("decimal"))
              {
                  _valuesList = value as List<decimal>;
              }
              else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("double"))
              {
                  _valuesList = value as List<double>;
              }
              else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("string"))
              {
                  _valuesList = value as List<string>;
              }
          }
      }
      

      参考:
      Get generic instance generic type using reflection
      Reflection a properties of type of generic list
      Reflection and generic types

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多