【问题标题】:Setting type dynamically at run time in of clause in .Net在.Net的子句中在运行时动态设置类型
【发布时间】:2012-02-05 02:40:58
【问题描述】:

我正在使用 LINQ to Entities 在 VB.Net 中生成类型化结果集。我有一个通用的报告类如下:

Public Class Report
    Public Property Name As String
    Public Property SQL As String
    Public Property Type As String
End Class

然后在调用范围内,我希望代码执行如下操作:

' create my data context
Dim context As New MyAppEntities
' get a report object out of a dropdown list
Dim rpt as Report = CType(aComboBox.SelectedItem, Report)
' create a result object based on the type stored in the object
Dim res As ObjectResult(Of rpt.Type) = context.ExecuteStoreQuery(Of rpt.Type)(rpt.SQL)

到目前为止,我发现 .Net 不允许我在运行时动态设置 (Of Type) 子句中的类型。

有人知道怎么做吗?

我尝试将 Report 类的 Type 属性更改为 Type 类型的对象,但这也不起作用。

顺便说一句,我知道有其他方法可以完成同样的事情,但我正在处理外部约束,这使得我现在必须处理这个问题。无论如何,直觉上这样的事情应该可以工作,我想弄清楚如何。

【问题讨论】:

标签: .net vb.net


【解决方案1】:

这是 C# 中的答案:

Creating a Generic<T> type instance with a variable containing the Type

相关方法及代码:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

在这种情况下,您将使用ObjectResult 而不是List。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    使用选项 strict 你不能这样做。 Strict 强制执行静态类型。使用静态类型,您必须坚持使用 Object,但如果您删除严格选项,您可以在 vb.net 中完成动态类型 见this问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多