2016-05-09 2 views
-3

У меня есть этот метод в Java, который я хотел бы реализовать на C#, но я точно не знаю, как это сделать.Эквивалент в C# параметра общего типа 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; 
} 

Для реализации Set<T> я выбрал класс HashSet<T>. Проблема в том, что я не знаю, что делать с параметром родового типа <T>. Я довольно новичок в C#, и в Java я не работал с генериками до пары недель назад, поэтому мои извинения, если мой вопрос слишком очевиден.

+1

Что означает '' означает после 'static'? Я думаю, что его нужно удалить на первое место. Возможно, вы имеете в виду 'public static T getAddedItems'? Или 'public static Set getAddedItems' –

+2

Вы попробовали Google« C# generics »? – SLaks

+1

Возможный дубликат [C# vs Java - общие списки] (http://stackoverflow.com/questions/2486277/c-sharp-vs-java-generic-lists) –

ответ

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, хотя).

+0

Я уже заметил моменты, о которых идет речь, и RemoveAll, но спасибо вам! Ваше решение работает! – Biurrun

+0

«Набор» в Java - это интерфейс, поэтому эквивалент C# будет интерфейсом «ISet». –

0

Это здесь 100% действует ява ...

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# вам не нужно обозначение T в методе, как Java, просто нужно вернуть родовой 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; 
} 
Смежные вопросы