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”的装箱或类型参数转换`