我在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中我几个星期前都没有使用泛型,所以如果我的问题太明显,我很抱歉。
答案 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;
}