gpt4 book ai didi

c# - 在泛型方法中返回特定类型

转载 作者:太空狗 更新时间:2023-10-30 00:02:42 24 4
gpt4 key购买 nike

我写了下面的方法:

public T CreatePackage<T>() where T : new()
{
var package = new T();

if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;

// ...

return compInfoPackage;
}

throw new System.NotImplementedException();
}

我检查 T 是什么类型,并据此处理我的变量 Package。当我想返回它时,我遇到了编译器错误。

ComponentInformationPackage 类型无法隐式转换为 T”

我该如何解决这个问题?

最佳答案

首先:在强制转换不起作用的地方,安全强制转换起作用:

return CompInfoPackage as T;

...假设 T 上有一个 class 约束:

public static T CreatePackage<T>() where T : class, new() { ... }

第二:给定这段代码:

var package = new T();
if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;

// ...

return (T)compInfoPackage;
}

...您已经有了对新对象的引用 package。因为它是 T 类型,所以编译器已经喜欢它作为返回类型。为什么不返回?

var package = new T();
if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;

// ...

return package; // Same object as compInfoPackage
}

关于c# - 在泛型方法中返回特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35033447/

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