C# 使用类型对象强制转换

C# 使用类型对象强制转换,c#,.net,reflection,types,C#,.net,Reflection,Types,我想使用GetType()方法获取变量的类型,然后将其他变量强制转换为该类型。例如,我有一个int32i,一个双d,我想得到d的类型(在一般情况下),然后将I转换为d的类型,然后将I的值授予d Int32 i = 123; Double d = 0.0; Type t = d.GetType(); d = Conversion.CastExamp1 < t > (i); d = Conversion.ConvertExamp1 < t > (i); int32i=123

我想使用GetType()方法获取变量的类型,然后将其他变量强制转换为该类型。例如,我有一个int32i,一个双d,我想得到d的类型(在一般情况下),然后将I转换为d的类型,然后将I的值授予d

Int32 i = 123;
Double d = 0.0;
Type t = d.GetType();
d = Conversion.CastExamp1 < t > (i);
d = Conversion.ConvertExamp1 < t > (i);
int32i=123;
双d=0.0;
类型t=d.GetType();
d=转换.xamp1(i);
d=换算系数.ConvertExamp1(i);
附言:@Zyphrax:我用过你在这里的帖子
但在编译时,它会说“找不到类型或命名空间名称“t…”。那么,您能更详细地描述一下如何使用您的代码吗?

您不能将
类型
用作泛型参数,这必须是可以构造的对象,而
类型
不能。您将通过使用对象作为参数来实现关闭

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Int32 i = 123;
            Double d = 0.0;
            Type t = d.GetType();

            // Print the type of d
            Console.WriteLine(t.Name); // "Double"

            var newI = DoStuff(t, i);

            // Print the new type of i
            Console.WriteLine(newI.GetType().Name); // "Double"
            Console.Read();
        }

        public static object DoStuff(object type, object inData)
        {
            Type newType = (Type)type;

            // Fix nullables...
            Type newNullableType = Nullable.GetUnderlyingType(newType) ?? newType;

            // ...and change the type
            return Convert.ChangeType(inData, newNullableType);
        }
    }
}

在运行时正确执行强制转换是很棘手的。这里的用例是什么?我认为您的级别太高了。使用泛型(the
),您可以简单地进行
转换你不能在这里施法。强制转换意味着更改引用对象的变量类型,而不以任何方式更改对象本身。您想要转换对象,这是完全不同的。为什么要这样做。这似乎是一个普遍的糟糕想法。如果我们知道你的潜在问题是什么,我们可能能够建议一种更好的解决方法,而不需要解决这个特定的问题。我的想法是,我想把我的程序分为两层:一层是UI,它获取用户输入的某种类型(即Int32),一层是DB交互。在DB交互层中,我想对多个DB重复使用它,对于某些DB,我不知道它和.NET之间的确切类型映射。所以我需要一些方法来获取.NET类型的DB,以便将数据从UI层传递到。请按照我文章中的链接进行操作,这可能有助于您更好地理解我的想法