【问题标题】:Generic type casting method (.Net)通用类型转换方法(.Net)
【发布时间】:2010-12-09 10:58:29
【问题描述】:

我正在尝试创建一个通用方法来投射一个对象,但似乎无法破解那个栗子。 (现在是星期五下午 3 点,这是漫长的一周)

好的,所以我有这个场景:

// We have a value (which .net sets as a double by default)
object obj = 1.0;

// We have the target type as a string, which could be anything:
// say string sometType = "System.Decimal"
Type type = Type.GetType(someType);

// I need a generic way of casting this
object castedObj = (xxx) obj;

我如何才能在不创建无数 if-else-staments 的情况下通用地转换该对象?

【问题讨论】:

  • 您想将其类型转换为type 变量所代表的类型吗?您将如何声明 castedObj?即你会给它什么类型?如果你将它存储为一个对象,那么类型转换是没有意义的......
  • 您不能将装箱的 int 转换为除 int(或 int?)以外的任何结构类型(有关详细信息,请参阅blogs.msdn.com/ericlippert/archive/2009/03/19/…。)如果您需要这样做,那么您需要使用除演员。

标签: c# .net types


【解决方案1】:

看看Convert.ChangeType方法,我想它会满足你的需求。

【讨论】:

    【解决方案2】:

    您不能将其转换为您动态指定的类型。

    您可以考虑改用generics,但我需要更多代码才能看到它如何为您提供帮助。

    【讨论】:

      【解决方案3】:

      您可以使用Convert.ChangeType 方法,如果您使用的类型实现IConvertible(所有原始类型都可以)。

          Convert.ChangeType(value, targetType);
      

      【讨论】:

        【解决方案4】:

        您可以执行以下操作:

            Type underlyingType = Type.GetType(someType);
        
        
            if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition().Equals(typeof (Nullable<>)))
            {
                var converter = new NullableConverter(underlyingType);
                underlyingType = converter.UnderlyingType;
            }
        
            // Try changing to Guid  
            if (underlyingType == typeof (Guid))
            {
                return new Guid(value.ToString());
            }
            return Convert.ChangeType(value, underlyingType);
        

        感谢 Monsters Go My.net 的更改类型功能

        【讨论】:

          猜你喜欢
          • 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
          相关资源
          最近更新 更多