Tag: 施法

将变量转换为另一个Type变量表示的类型?

我知道之前已经问过这样的问题,我怀疑这是可能的,但我只是想100%确定它不是。 在VB.net或C#中(无论是哪种语言,都没关系),我想将变量转换为另一个Type变量所代表的类型。 以下是C#中需要的代码类型的示例: Object castMe = new Foo(); Type castTo = typeof(Foo); Foo beenCast = (castTo.GetRepresentedType())castMe; beenCast.MethodInFoo(); ……或者在VB中,类似于: Dim castMe As Object = New Foo() Dim castTo As Type = GetType(Foo) Dim beenCast As Foo = CType(castMe, castTo.GetRepresentedType()) beenCast.MethodInFoo() 最大的问题显然是指定一个方法,该方法将在运行时为cast类型参数返回Type,而不是实际的编译时类型(即CType(castMe, Foo) )。 我不太明白为什么你不能这样做,但是……当然,可能会导致运行时转换错误,但是当你指定编译时类型时也可以得到它们。 如果castMe不是Foo的实例,那么即使CType(castMe, Foo)仍然会抛出InvalidCastException 。

为什么直接转换失败但“as”运算符在测试约束generics类型时成功?

“编译一些使用带有类型约束的generics的C#代码时,我遇到了一个有趣的好奇心。 我写了一个快速测试用例来说明。 我在Visual Studio 2010中使用.NET 4.0。 namespace TestCast { public class Fruit { } public class Apple : Fruit { } public static class Test { public static void TestFruit(FruitType fruit) where FruitType : Fruit { if (fruit is Apple) { Apple apple = (Apple)fruit; } } } } 对Apple的强制转换失败并显示错误:“无法将类型’FruitType’转换为’TestCast.Apple’”。 但是,如果我更改行以使用as运算符,它将编译而不会出现错误: Apple apple = fruit […]

为什么在.net 2.0中向原语(即:int)转换null会抛出空引用exception而不是无效的强制转换exception?

我正在浏览一些代码并遇到了我的combobox尚未初始化的情况。 这是在.NET 2.0中,在下面的代码中,this.cbRegion.SelectedValue为null。 int id = (int)this.cbRegion.SelectedValue; 此代码抛出了空引用exception,而不是无效的强制转换exception。 我想知道是否有人知道为什么它会抛出空引用exception而不是无效的强制转换?

当ClassB从ClassAinheritance时,如何将List 转换为List ?

我将json字符串反序列化为List ,现在我想在将它从BindModel方法返回之前将其BindModel为List 。 我需要进行转换,因为方法需要获取List 。 为什么我在投票时会收到错误? 毕竟, ClassBinheritance自ClassA 。 我该怎么办? PS这个问题从这篇文章扩展而来。 在线new DataContractJsonSerializer(typeof(List)); 而不是List ,将在运行时构造类型。 public override object BindModel(…) { var serializer = new DataContractJsonSerializer(typeof(List)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(“[{\”id\”:\”1\”,\”name\”:\”name\”}]”)); var list = serializer.ReadObject(ms); return (List)list; } [KnownType(typeof(ClassA))] [DataContract] public class ClassA { public ClassA(); } [KnownType(typeof(ClassB))] [DataContract] public class ClassB : ClassA { [DataMember(Name […]

为什么在与null比较时转换为对象?

在浏览有关Equals覆盖的MSDN文档时,有一点引起了我的注意。 在此特定页面的示例中,进行了一些空检查,并在进行比较时将对象转换为System.Object类型: public override bool Equals(System.Object obj) { // If parameter is null return false. if (obj == null) { return false; } // If parameter cannot be cast to Point return false. TwoDPoint p = obj as TwoDPoint; if ((System.Object)p == null) { return false; } // Return true if the fields match: return […]

在视觉基础中投射?

我是一个被迫使用VB的C#程序员(呃!!!!)。 我想在一个方法中检查多个控件状态,在C#中这将完成如下: if (((CheckBox)sender).Checked == true) { // Do something… } else { // Do something else… } 那我怎么能在VB中完成这个呢?