泛型 class 从 java 转换为 C#

Generic class convert from java to C#

从 JAVA 转换为 C#:

public interface SomeInterface
{
    public <T> void invoke(Collection<T> list);
}
class someMethod implemet SomeInterface
{
    public <T> void invoke(Collection<T> list) 
    {
        int count = 0;
        if (itemToCount == null) 
        {
            for ( T item : collection )
                if (item == null)
                    count++;
        }
        else
        {
            //some code
        }   
        return count;
    }
}

如果我在 C# 中复制它,它将显示错误:

Error: The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)

Error: Invalid token '>' in class, struct, or interface member declaration

Error: Invalid token '<' in class, struct, or interface member declaration

其实我不知道如何在c#中使用这种类型的代码。

如果你想在界面中创建一个集合,你不能在 C# 中通过这种方式来完成。

你需要这样做:

public interface MyInterface<T,TCollection>
where TCollection : ICollection<T>
{
  TCollection MyCollection{ get; set; }
}

此外,您的 class 中会出现错误,例如 Andy Korneyev 所说

希望对您有所帮助。

Java 和 C# 在某些方面可能具有相似的概念,但两者并不相同。如果您想快速了解 C# 泛型,请查看此 C# tutorial on generics

最好不要只是将 Java 代码复制到 C# 中。对于您的代码,这个使用泛型的简单示例可能会对您有所帮助:

public interface SomeInterface
{
    public int invoke<T>(ICollection<T> list);
}

public class SomeClass : SomeInterface
{
    public int invoke<T>(ICollection<T> list)
    {
        int count = 0;
        foreach (var item in list)
        {
            count++;
        }
        return count;
    }
}