有人告诉我要跳出框框,然后想出一种无需使用new关键字即可在VB中创建对象的方法。有人告诉我这是可能的,但我很难弄清楚。我知道原始数据存储在堆栈上,对对象的引用也存储在堆栈上,但是对象的实际存储空间在堆中,而new则为我们做这件事。当我尝试不使用新的代码时,我大多会得到null引用异常,对此有何想法?
Dim objTest as TestOne()
'some class named TestOne with empty Constructor
我已经有一段时间没有做VB了,但是Activator同时存在于C#和VB中。这是几行C#,您可以将其转换为VB:
var newThing = (TestOne)Activator.CreateInstance(typeof(TestOne));
newThing.ID = 5;
CreateInstance方法返回一个对象,我可以使用它转换为正确的类
(TestOne)
这是类型转换的C#语法。抱歉,我忘记了如何在VB中执行此操作。
其中“ TestOne”类看起来像:
class TestOne {
public int ID { get; set; }
}
注意'Activator'是.NET reflection的一部分。
如果我正确理解了您要问的内容,则在执行此操作时,它将返回具有两个属性(Name和Price)的匿名类型的实例的集合。
Dim productQuery = From product In products
Select product.Name, product.Price
For Each prod In productQuery
Console.WriteLine(prod.Name & ": " & prod.Price)
Next