C# 将泛型传递给也使用泛型的外部方法
我正在包装一个使用泛型的方法,但我不理解如何正确地传递泛型 我有一个C# 将泛型传递给也使用泛型的外部方法,c#,generics,C#,Generics,我正在包装一个使用泛型的方法,但我不理解如何正确地传递泛型 我有一个FindAsset方法,它应该像LoadAsset一样接受泛型类型 public T FindAsset<T>(string assetName) { T match; foreach (AssetBundle bundle in assets) { if (bundle.Contains(assetName)) { match = bundle.LoadAs
FindAsset
方法,它应该像LoadAsset
一样接受泛型类型
public T FindAsset<T>(string assetName) {
T match;
foreach (AssetBundle bundle in assets) {
if (bundle.Contains(assetName)) {
match = bundle.LoadAsset<???>(assetName);
}
}
return match;
}
public T FindAsset(字符串assetName){
T匹配;
foreach(资产中的资产捆绑包){
if(bundle.Contains(assetName)){
匹配=bundle.LoadAsset(assetName);
}
}
复赛;
}
我只是不确定如何正确地将泛型类型传递到LoadAsset
。该方法还有一个签名,它接受类型
作为参数,但在这种情况下,我看不到正确转换对象的方法
我希望它的用法可以是
myclass.FindAsset(assetName)代码>如果我正确理解了这个问题,您只需要通过T,如下所示
public T FindAsset<T>(string assetName) {
T match;
foreach (AssetBundle bundle in assets) {
if (bundle.Contains(assetName)) {
match = bundle.LoadAsset<T>(assetName);
}
}
return match;
}
public T FindAsset(字符串assetName){
T匹配;
foreach(资产中的资产捆绑包){
if(bundle.Contains(assetName)){
匹配=bundle.LoadAsset(assetName);
}
}
复赛;
}
如果~T
(泛型父类使用的相同类型)与要传递给LoadAsset的类型不同
然后可以传递多个泛型:
public T FindAsset<T,U>(string assetName) {...
LoadAsset<U>
public T FindAsset(string assetName){。。。
负荷资产
请参阅此处的更多信息:您似乎需要一个通用约束,并且可以使用linq缩短代码:
public T FindAsset<T>(string assetName)
where T : UnityEngine.Object
{
T bundle = assets.FirstOrDefault(bundle => bundle.Contains(assetName));
return (bundle != null) ? bundle.LoadAsset<T>(assetName) : null;
}
public T FindAsset(字符串assetName)
其中T:UnityEngine.Object
{
T bundle=assets.FirstOrDefault(bundle=>bundle.Contains(assetName));
返回(bundle!=null)?bundle.LoadAsset(assetName):null;
}
不是您要传递给LoadAsset的类型吗?只需再次传递t
,除非您想使用另一个类型?好的,我尝试了这个方法,但误解了错误。我想这通常会起作用,但在我的情况下LoadAsset方法不是完全泛型的:类型“t”不能用作泛型类型或me中的类型参数“t”方法“UnityEngine.AssetBundle.LoadAsset(string)”。没有从“T”到“UnityEngine.Object”的装箱或类型参数转换`