相当于java泛型类型参数的c#

时间:2016-05-09 16:26:56

标签: java c#

我在Java中使用这种方法,我想在C#中实现,但我不确切知道如何。

public static <T> Set<T> getAddedItems(Set<T> before, Set<T> after) {
    Set<T> out = new HashSet<T>(after);
    out.removeAll(before);
    return out;
}

为了实施Set<T>,我选择了班级HashSet<T>。问题是我不知道如何处理泛型类型参数<T>。我是C#的新手,在Java中我几个星期前都没有使用泛型,所以如果我的问题太明显,我很抱歉。

2 个答案:

答案 0 :(得分:1)

也许是这样的:

public static HashSet<T> getAddedItems<T>(HashSet<T> before, HashSet<T> after)
{
  HashSet<T> out2 = new HashSet<T>(after);
  out2.RemoveWhere(x => before.Contains(x));
  return out2;
}

out是C#中的关键字,所以我稍微重命名了一下。另请注意,HashSet没有RemoveAll(),但RemoveWhere()似乎也做同样的事情(但需要linq)。

答案 1 :(得分:0)

这是100%有效的java ...

public static <T> Set<T> getAddedItems(Set<T> before, Set<T> after) {
    Set<T> out = new HashSet<T>(after);
    out.removeAll(before);
    return out;
}

到目前为止一直很好,现在在 C# 你不需要像java这样的方法中的T表示法,只需要返回通用HashSet<T>

public static HashSet<T> GetQueryString<T>(HashSet<T> before, HashSet<T> after)
{
    HashSet<T> returnHashSet = new HashSet<T>(after);
    returnHashSet.RemoveWhere(x => before.Contains(x));
    return returnHashSet;
}