Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时定义的类型的列表_C# - Fatal编程技术网

C# 在运行时定义的类型的列表

C# 在运行时定义的类型的列表,c#,C#,我正在使用C#作为编程语言执行自动化 我有一个枚举,在表中保存列。我将这些列的数据类型保存在每个列名称的“描述”中 每个列都是可排序的,排序后我想验证对特定列的排序是否正确。我在列中创建一个数据列表,以编程方式排序,然后在屏幕上排序,读取内容,然后使用list.SequenceEquals 我试图创建一个“类型”列表(如“描述”中所述)。但看起来我无法创建运行时对象列表 有什么解决办法吗 代码 { 公共枚举列 { [说明(“日期时间”)] 发票日期, [说明(“字符串”)] 顾客 [说明(“字符

我正在使用C#作为编程语言执行自动化

我有一个枚举,在表中保存列。我将这些列的数据类型保存在每个列名称的“描述”中

每个列都是可排序的,排序后我想验证对特定列的排序是否正确。我在列中创建一个数据列表,以编程方式排序,然后在屏幕上排序,读取内容,然后使用list.SequenceEquals

我试图创建一个“类型”列表(如“描述”中所述)。但看起来我无法创建运行时对象列表

有什么解决办法吗

代码

{
公共枚举列
{
[说明(“日期时间”)]
发票日期,
[说明(“字符串”)]
顾客
[说明(“字符串”)]
发票ID,
[说明(“字符串”)]
责任类型描述,
[说明(“字符串”)]
交易状态说明,
[说明(“字符串”)]
TestTransaction,
[说明(“字符串”)]
交易日期,
[说明(“int”)]
事务ID,
[说明(“字符串”)]
源系统,
[说明(“字符串”)]
船舶地理代码,
[说明(“日期时间”)]
创作时间
}
var type=MyExtensions.GetDataType(tranColumns.InvoiceDate);//获取系统.type
列表=新列表();
}
公共静态字符串GetEnumDescription(System.Enum值)
{
FieldInfo fi=value.GetType().GetField(value.ToString());
DescriptionAttribute[]属性=
(DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute),false;
if(attributes!=null&&attributes.Length>0)
返回属性[0]。说明;
其他的
返回值.ToString();
}
公共静态类型GetDataType(System.Enum值)
{
开关(GetEnumDescription(value).ToLower())
{
案例“日期时间”:
返回类型(日期时间);
大小写“字符串”:
返回类型(字符串);
案例“int”:
返回类型(Int32);
违约:
日志(“未知数据类型”,LogType.ErrorEntry);
返回类型(对象);
}
}
无法以这种方式创建“类型”列表

Type listType=typeof(列表)。MakeGenericType(类型);
IList list=(IList)Activator.CreateInstance(listType);
您需要将IList.Add与对象一起使用,因为无法转换为列表。我重新阅读了您的代码,您似乎可以通过这种方式编辑代码并创建列表:

public static List<T> CreateMyList<T>(System.Enum value)
    {
        switch(GetEnumDescription(value).ToLower())
        {
            case "datetime":
                return new List<DateTime>();
            case "string":
                return new List<String>();
            case "int":
                return new List<Int32>();
            default:
                Utilities.log("Unkwown datatype",LogType.ErrorEntry);
                return new List<Object>();
        }
    }
公共静态列表CreateMyList(System.Enum值)
{
开关(GetEnumDescription(value).ToLower())
{
案例“日期时间”:
返回新列表();
大小写“字符串”:
返回新列表();
案例“int”:
返回新列表();
违约:
日志(“未知数据类型”,LogType.ErrorEntry);
返回新列表();
}
}
Type listType=typeof(列表)。MakeGenericType(类型);
IList list=(IList)Activator.CreateInstance(listType);
您需要将IList.Add与对象一起使用,因为无法转换为列表。我重新阅读了您的代码,您似乎可以通过这种方式编辑代码并创建列表:

public static List<T> CreateMyList<T>(System.Enum value)
    {
        switch(GetEnumDescription(value).ToLower())
        {
            case "datetime":
                return new List<DateTime>();
            case "string":
                return new List<String>();
            case "int":
                return new List<Int32>();
            default:
                Utilities.log("Unkwown datatype",LogType.ErrorEntry);
                return new List<Object>();
        }
    }
公共静态列表CreateMyList(System.Enum值)
{
开关(GetEnumDescription(value).ToLower())
{
案例“日期时间”:
返回新列表();
大小写“字符串”:
返回新列表();
案例“int”:
返回新列表();
违约:
日志(“未知数据类型”,LogType.ErrorEntry);
返回新列表();
}
}

您可能需要Activator.CreateInstance方法(类型)

string[]instances=instanceSpec.Split(“;”);
Array instlist=Array.CreateInstance(typeof(object),instances.Length);
目标项目;
for(int i=0;i
您可能需要Activator.CreateInstance方法(类型)

string[]instances=instanceSpec.Split(“;”);
Array instlist=Array.CreateInstance(typeof(object),instances.Length);
目标项目;
for(int i=0;i
林克去营救

            var type = MyExtensions.GetDataType(column as Enum);

        DataTable dtAscen; //=logic to read table;
        List<object> listBeforeSort = (from x in dtAscen.AsEnumerable()
                            select (object)Convert.ChangeType(x.Field<string>(column.ToString()), type)).ToList();
        var temp = listBeforeSort.OrderBy(s => s);
        if(!listBeforeSort.SequenceEqual(temp))            
            Utilities.log("Issue with ascending sort on column " + column.ToString(), LogType.ErrorEntry);
var type=MyExtensions.GetDataType(列作为枚举);
数据表dtAscen//=读表逻辑;
List listBeforeSort=(从dtassen.AsEnumerable()中的x开始)
选择(对象)Convert.ChangeType(x.Field(column.ToString()),type)).ToList();
var temp=listBeforeSort.OrderBy(s=>s);
如果(!listBeforeSort.SequenceEqual(temp))
log(“列“+column.ToString(),LogType.ErrorEntry上的升序排序问题”);
Linq重新启动
  string[] instances = instanceSpec.Split(';');
    Array instlist = Array.CreateInstance(typeof(object), instances.Length);
    object item;
    for (int i = 0; i < instances.Length; i++)
    {
        // create the object from the specification string
        Console.WriteLine("Creating instance of: {0}", instances[i]);
        item = Activator.CreateInstance(Type.GetType(instances[i]));
        instlist.SetValue(item, i);
    }
    Console.WriteLine("\nObjects and their default values:\n");
    foreach (object o in instlist)
    {
        Console.WriteLine("Type:     {0}\nValue:    {1}\nHashCode: {2}\n",
            o.GetType().FullName, o.ToString(), o.GetHashCode());
    }
            var type = MyExtensions.GetDataType(column as Enum);

        DataTable dtAscen; //=logic to read table;
        List<object> listBeforeSort = (from x in dtAscen.AsEnumerable()
                            select (object)Convert.ChangeType(x.Field<string>(column.ToString()), type)).ToList();
        var temp = listBeforeSort.OrderBy(s => s);
        if(!listBeforeSort.SequenceEqual(temp))            
            Utilities.log("Issue with ascending sort on column " + column.ToString(), LogType.ErrorEntry);