如何在.NET中定义运行时的属性类型?

use*_*010 2 .net c# types

在Winform应用程序中,我有一个包含2个属性的类,我希望用户能够选择这些属性的类型.

这是我到目前为止所做的:

具有属性的类:

static public class DataGridColumnData
{
    public static object SearchColumn { get; set; }
    public static object ResultColumn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且用户可以使用具有DropDownList Style的Combobox来选择属性的类型,其具有类似的值

System.String
System.Double
System.Int32
System.Boolean
System.DateTime 
Run Code Online (Sandbox Code Playgroud)

有没有办法让这些属性成为用户选择的类型?

Hei*_*nzi 5

你可以使你的类通用:

static public class DataGridColumnData<T>
{ 
    public static T SearchColumn { get; set; } 
    public static T ResultColumn { get; set; } 
} 
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中,您可以创建所需类型的类:

object myDataGridColumnData;
if (userSelection == "String") {
    myDataGridColumnData = new DataGridColumnData<string>();
} else if (userSelection == "Double") {
    myDataGridColumnData = new DataGridColumnData<double>();
} ...
Run Code Online (Sandbox Code Playgroud)

请注意,从技术上讲,它DataGridColumnData<string>是一种完全不同的类型DataGridColumnData<int>,因此object是唯一常见的超类型.因此,为了能够访问myDataGridColumnData代码中的值,您可能需要使用dynamic变量或(首选)使用一些返回键入的值作为对象的公共接口或基类.