gpt4 book ai didi

c# - 如何在不知道类型的情况下实例化通用列表

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:01 25 4
gpt4 key购买 nike

我创建了一个方法来组织一个不知道类型的通用列表,它会根据它的 int 或 decimal 进行排序。

然而,从文本框中检索值的代码使用列表

我试图将它转换为列表,但它不起作用。如果他们在文本框中键入整数、小数或字符串,我希望此代码能够正常工作。

这是面试问题的一部分,他们要求不要使用排序方法,并且输入应该接收例如 INTS 或 DECIMALS

private void btnSort_Click(object sender, EventArgs e)
{
List<int> list = new List<int>();
list.Add(int.Parse(i1.Text));
list.Add(int.Parse(i2.Text));
list.Add(int.Parse(i3.Text));
list.Add(int.Parse(i4.Text));
list.Add(int.Parse(i5.Text));
Sort(list);
StringBuilder sb = new StringBuilder();
foreach (int t in list)
{
sb.Append(t.ToString());
sb.AppendLine();
}
result.Text = sb.ToString();
}


private void Sort<T>(List<T> list)
{
bool madeChanges;
int itemCount = list.Count;
do
{
madeChanges = false;
itemCount--;
for (int i = 0; i < itemCount; i++)
{
int result = Comparer<T>.Default.Compare(list[i], list[i + 1]);

if (result > 0)
{
Swap(list, i, i + 1);
madeChanges = true;
}
}
} while (madeChanges);
}


public List<T> Swap<T>(List<T> list,
int firstIndex,
int secondIndex)
{
T temp = list[firstIndex];
list[firstIndex] = list[secondIndex];
list[secondIndex] = temp;

return list;
}

我想要这样的东西:但给出了错误错误 1 ​​找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)c:\users\luis.simbios\documents\visual studio 2010\Projects\InterViewPreparation1\InterViewPreparation1\Generics\GenericsSorting1.cs 22 18 InterViewPreparation1

列表 list = new List(); list.Add(i1.Text); list.Add(i2.Text); 排序(列表);

最佳答案

because its an interview question in which they asked not to use the sort method.

在这种情况下,您可以添加一个通用约束 IComparable<T> 然后使用 CompareTo()方法:

 private void Sort<T>(List<T> list) where T : IComparable<T>
{
//...
}

编辑:

您必须编写自定义代码来确定输入是字符串、整数还是小数,即使用 TryParse(..) - 虽然这将非常脆弱。一旦你知道类型(一种或另一种方式),你就可以使用 MakeGenericType()Activator.CreateInstance()创建你的 List<T>对象,然后使用 MakeGenericMethod()调用您的通用方法:

Type type = typeof(string);
IList list = (IList) Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
//add items to list here

var p = new Program();
MethodInfo method = typeof(Program).GetMethod("Sort");
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { type });
genericMethod.Invoke(p, new [] {list} );

我很确定这不是面试问题打算要问的。

关于c# - 如何在不知道类型的情况下实例化通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7570992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com