最简单的例子是内置类keyValuePair(T,U)。我希望能够根据使用情况对键属性和值属性进行不同的命名,并且设计时intellisense会显示这些名称而不是键和值。这可以通过反射完成。发射?它可以用另一种方式完成吗?
这看起来像一个小范围,只能保存1类8行代码,但它对更复杂的类有更广泛的含义。
作为另一个例子,我希望能够写新的
Dim item as KeyValuePair (of string, string)("LoanNumber", "LoanApplicationID")
或
KeyValuePair<string,string>("LoanNumber","LoanApplicationID") item;
并通过以下方式访问intellisense:
var result=item.LoanNumber;
每次我需要一个具有自定义属性名称的类型时,无需在代码中创建以下类:
class LoanInfo
{
string LoanNumber{get;set;}
string LoanApplicationID{get;set;}
}
不要因为使用keyValuePair而挂断它,例如它因为它的功能接近我想要的功能,但是不允许我设置属性名称。
这可能吗?
答案 0 :(得分:1)
您可以这样使用anonymous types。我知道VS2008 / C#会理解这些属性并用Intellisense给你它们,并且假设它在VB中是相同的,但是我没有在VB中编程所以YMMV。
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
Dim name as string
name = product.Name
您看到的最常见的地方之一是LINQ。
Dim namePriceQuery = From prod In products _
Select prod.Name, prod.Price
Dim firstName as string
firstName = namePriceQuery.First().Name
答案 1 :(得分:0)
不,你不能。原因是它是动态的,不仅不能用intellisense它不能编译,因为你试图引用的属性不存在。
我建议你以你不想要的方式创建它:
class LoanInfo{ string LoanNumber{get;set;} string LoanApplicationID{get;set;}}
我会说你创建了一个可以继承属性的接口。但你仍然需要对集合进行编码并获得。
答案 2 :(得分:0)
目前没有办法做到这一点,因为没有匿名的命名类型。但是,使用DevExpress(coderush / refactor pro),您可以创建一个示例匿名类型,并将其重构为实际类。我猜resharper也可以做到。