К вашему сведению: принятый ответ с использованием new
НЕ является портом предоставленного ответа Java. Конечный результат может быть таким же (и я на самом деле рекомендую использовать новые экземпляры вместо методов, называемых player
и attribute
), но это не порт ответа Java. Прежде всего, я хотел уточнить, что в этом ответе на случай, если кто-то еще столкнется с таким вопросом и ответом в будущем.
Основываясь на коде Java, похоже, ваша программа должна содержать методы player(String)
и attribute(String, String, String)
, которые возвращают экземпляр Player
и List<Attribute>
соответственно. Поэтому вы должны создать те же самые методы в программе C#. NET.
Ваш текущий фрагмент Java не работает как есть, и фактически приведет к аналогичной ошибке! Попробуйте онлайн.
Принятый ответ, использующий new
для создания новых экземпляров Player
и List<Attribute>
напрямую, может работать и давать то же самое результаты в обеих программах, но это не прямой порт вашей текущей Java реализации! В противном случае ваш код Java выглядел бы так:
Map<Player, List<Attribute>> map = new HashMap<>();
map.put(
new Player("Lebron James"),
new ArrayList<Attribute>(){{
add(new Attribute("mid height"));
add(new Attribute("mid weidght"));
add(new Attribute("high vertical"));
}}
);
Попробуйте онлайн.
Предполагая, что вы более полны Java код выглядит примерно так:
...
Map<Player, List<Attribute>> map = new HashMap<>();
map.put(
player("Lebron James"),
attribute("mid height", "mid weidght", "high vertical")
);
}
private Player player(String name){
return new Player(name);
}
private List<Attribute> attribute(String... strAttributes){
List<Attribute> resultList = new ArrayList<>();
for(String strAttr : strAttributes){
resultList.add(new Attribute(strAttr));
}
return resultList;
}
Попробуйте онлайн.
Портированный код C#. NET станет это:
...
IDictionary<Player, IList<Attribute>> dictionary = new Dictionary<Player, IList<Attribute>>();
dictionary.Add(
player("Lebron James"),
attribute("mid height", "mid weidght", "high vertical")
);
}
private Player player(string name){
return new Player(name);
}
private IList<Attribute> attribute(params string[] strAttributes){
IList<Attribute> resultList = new List<Attribute>();
foreach(string strAttr in strAttributes){
resultList.Add(new Attribute(strAttr));
}
return resultList;
}
Попробуйте онлайн.
Опять же, я в первую очередь создал этот ответ для других людей, сталкивающихся с этим вопросом и ответом в будущее и уточнить, что принятый ответ не является прямым портом предоставленного Java фрагмента.