gpt4 book ai didi

c# - 在运行时使用类型变量创建类型列表

转载 作者:行者123 更新时间:2023-11-30 17:06:24 25 4
gpt4 key购买 nike

<分区>

我试图简化我的方法,在一个函数中创建几个变量,该函数针对不同类型和不同操作重复,最终我将迁移到一个可以处理多种类型的函数,但我是分阶段进行的。我希望能够制作一个对象列表而不是列表,而不必在任何地方复制/粘贴对象类型。我曾希望通过一些非常简单的事情来实现这一点,比如

Type t = typeof(LinkAddy);
var x = List<t>();

但这不能编译。

然后我尝试了以下答案提供的不同解决方案:Storing variable type and using it to create collections at runtime

static IList createGenericList(Type typeInList) {
var genericListType = typeof(List<>).MakeGenericType(new[] { typeInList });
return (IList)Activator.CreateInstance(genericListType);
}

static List<T> createGenericList<T>() {
List<T> genericListType = new List<T>();
return genericListType;
}

下面是不同的方法及其结果:

Type ThisType = typeof(LinkAddy);
// The normal list method, means I have to copy/paste LinkAddy everywhere
var fromQuery = new List<LinkAddy>();
// Makes a List, but I still have to put LinkAddy
var fromQuery_IsNew = createGenericList<LinkAddy>();
// Provides a List, I don't have to place LinkAddy
// but its a List<object> and not List<LinkAddy> so wherever I use
// the objects, I'll have to cast the object like
// string title = (fromQuery_IsDiff[0] as LinkAddy).Title;
var fromQuery_IsDiff = createGenericList(ThisType);

编辑:最终,我不知道运行时的类型,该函数将变得通用,这样我就可以将 LinkAddy 作为类型或其他类型传递,它会根据需要生成列表.第一步只是在整个函数中使用泛型,然后检查类型是否需要更具体。这是一个包含大约 200 行代码的大型函数的一部分,这些代码与数据库同步的列表验证检查有关(它确定哪个缓存版本和服务器版本较新,以较新者为准,将覆盖发布到另一个,如果您有权这样做)。我有多个类似于 LinkAddy 的类,它们使用 WCF RIA 服务和 SilverLight 同步到服务器上的 SQL 数据库。这些条目还存储在一个类中,该类执行 XML 序列化并将 XML 文件保存到用户系统(缓存)。这使我在现场的代理人可以在没有互联网连接的情况下访问我的大部分站点数据,就像他们在客户面前经常遇到的情况一样。

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