0

非常に近い2つのメソッドがあり、コードをDRYに保つために呼び出すことができる1つのメソッドを作成したいと思います。

public IEnumerable<HighScoreViewModel> GetNightlyHighScores()
{
    lock (_Key)
    {
        //return GetHighScores(x => x.NightlyHighScore);

        return _allPlayers
            .OrderByDescending(x => x.NightlyHighScore)
            .Take(8)
            .Select(x=> new HighScoreViewModel
            {
                Points = x.NightlyHighScore,
                PointsText = "FG: " + x.NightlyHighScore,
                ImageUrl = x.Facebook.SmallImageUrl,
                DisplayName = x.DisplayName,
            }).ToList();
    }
}

public IEnumerable<HighScoreViewModel> GetBestHighScores()
{
    lock (_Key)
    {
        //return GetHighScores(x => x.BestHighScore);

        return _allPlayers
            .OrderByDescending(x => x.BestHighScore)
            .Take(8)
            .Select(x => new HighScoreViewModel
            {
                Points = x.BestHighScore,
                PointsText = "FG: " + x.BestHighScore,
                ImageUrl = x.Facebook.SmallImageUrl,
                DisplayName = x.DisplayName,
            }).ToList();
    }
}

私は何かに近づいていますが、「魔法」とマークされたビットを理解できません

public IEnumerable<HighScoreViewModel> GetHighScores<TKey>(Func<Player, TKey> highscore)
{
    return _allPlayers
        .OrderByDescending(highscore)
        .Take(8)
        .Select(x => new HighScoreViewModel
        {
            // Magic?
            //Points = x.BestHighScore,
            PointsText = "FG: " + x.BestHighScore,
            //ImageUrl = x.Facebook.SmallImageUrl,
            DisplayName = x.DisplayName,
        }).ToList();
}
4

2 に答える 2

1

BestHighScoreとは同じタイプであるためNightlyHighScore、次のことができるはずです。

public IEnumerable<HighScoreViewModel> GetHighScores(Func<Player, double> highscore)
{
    return _allPlayers
        .OrderByDescending(highscore)
        .Take(8)
        .Select(x => new HighScoreViewModel
        {
            // Magic?
            Points = highScore(x),
            PointsText = "FG: " + x.BestHighScore,
            //ImageUrl = x.Facebook.SmallImageUrl,
            DisplayName = x.DisplayName,
        }).ToList();
}

highscoreの実際の型が何であれ返す必要がPointsあります。

于 2012-10-17T19:16:53.403 に答える
1

それほど魔法ではなく、関数を使用してプレーヤーから値を取得するだけです。

public IEnumerable<HighScoreViewModel> GetHighScores<TKey>(Func<Player, TKey> highscore)
{
  return _allPlayers
    .OrderByDescending(highscore)
    .Take(8)
    .Select(x => new HighScoreViewModel
    {
        Points = highscore(x),
        PointsText = "FG: " + highscore(x),
        ImageUrl = x.Facebook.SmallImageUrl,
        DisplayName = x.DisplayName,
    }).ToList();
}

電話:

GetHighScores(x => x.NightlyHighScore)

GetHighScores(x => x.BestHighScore)
于 2012-10-17T19:17:29.143 に答える