0

I need to convert one object to another...in both cases of a single instance of the object as well as corresponding Lists of those objects. I'd rather not have to perform the same mappings in 2 places. Here is what I mean: This converts a Facebook movie to a Standard Movie object

//Converts an Facebook object to a Standard Movie object
    public MovieDetails ConvertFacebookMovieToStandardMovie(FacebookMovie Movies)
    {
        MovieDetails objMovieDetails = new MovieDetails();
        objMovieDetails.ID = 0;
        objMovieDetails.Source = Movies.Source;
        objMovieDetails.SourceID = Convert.ToString(Movies.ID);
        objMovieDetails.Title = Movies.Name;
        objMovieDetails.URL = GetInternalMovieURL(objMovieDetails.Source, objMovieDetails.SourceID);
        objMovieDetails.ImageURL = Movies.Picture;
        objMovieDetails.SourceURL = Movies.SourceURL;
        objMovieDetails.Description = Movies.Description

        return objMovieDetails;

    }//Convert Facebook to standard

Now I also need to do the same things in cases where I have the same objects, just in List form, i.e.

//Converts an Facebook class to a MovieDetails class of WWN
    public List<MovieDetails> ConvertFacebookMovieToStandardMovie(List<FacebookMovie> lstFacebookMovieDetails)
    {
        List<MovieDetails> lstMovieListDetails = lstFacebookMovieDetails.Select(Movies => new MovieDetails()
        {
            ID = 0
            ,Source = Movies.Source
            ,SourceID = Convert.ToString(Movies.ID)
            ,Title = Movies.Name
            ,URL = GetInternalMovieURL(Source, SourceID)
            ,ImageURL = Movies.Picture
            ,SourceURL = Movies.SourceURL
            ,Description = Movies.Description
        }).ToList();

        return lstMovieListDetails;

    }//Convert Facebook to standard

I'm new to c# and linq, so not sure how I could create one method that could handle both...or at least a way to encapsulate the mappings.

I know I could create an overload method for the List scenario and loop through the items in the list and call the first object convert method...But I was hoping to use the linq route I currently have for, what I'm guessing, is better performance.

Thanks! Chad


Have you considered generating an Internet Calendar Appointment (ICA) request and emailing it? I believe that format contains delegate information that you can use.

Here is a link to some Microsoft documentation on how to add this (in ASP.Net, but that shouldn't matter) and here is a link to the IETF RFC that defines the format.

4

3 回答 3

2

只需调用您的函数。

 public List<MovieDetails> ConvertFacebookMovieToStandardMovie(List<FacebookMovie> lstFacebookMovieDetails)
    {
        List<MovieDetails> lstMovieListDetails =
          lstFacebookMovieDetails.Select(Movies => ConvertFacebookMovieToStandardMovie(Movies)).ToList();

        return lstMovieListDetails;
     }

或其他方式

public MovieDetails ConvertFacebookMovieToStandardMovie(FacebookMovie Movies)
{
    return ConvertFacebookMovieToStandardMovie(new [] { Movies} ).FirstOrDefault();
}//Convert Facebook to standard


你也可以as超载

public static MovieDetails operator as(FacebookMovie m)
{
   if (m == null) return null;

    MovieDetails objMovieDetails = new MovieDetails()
        {
          ID = 0,
          Source = Movies.Source,
          SourceID = Convert.ToString(Movies.ID),
          Title = Movies.Name,
          URL = GetInternalMovieURL(objMovieDetails.Source, objMovieDetails.SourceID),
          ImageURL = Movies.Picture,
          SourceURL = Movies.SourceURL,
          Description = Movies.Description
       }

    return objMovieDetails
}

然后 ConvertFacebookMovieToStandardMovie 看起来很傻,但它看起来像这样:

public MovieDetails ConvertFacebookMovieToStandardMovie(FacebookMovie Movies)
{
    return Movies as MovieDetails;
}//Convert Facebook to standard

public List<MovieDetails> ConvertFacebookMovieToStandardMovie(List<FacebookMovie> lstFacebookMovieDetails)
{
    List<MovieDetails> lstMovieListDetails = 
      lstFacebookMovieDetails.Select(Movies => Movies as MovieDetails).ToList();

    return lstMovieListDetails;

}
于 2012-07-27T23:57:28.850 回答
1

除非为这两种情况使用单独的代码可以提高性能,否则我会简单地废弃单个电影变体并保留 List 变体。要执行单个电影变体,只需执行以下操作using System.Linq;

List<FacebookMovie> moviesDetailsList = ...
MovieDetails movieDetails = ConvertFacebookMovieToStandardMovie(moviesDetailsList).Single();

如果您希望将单个案例作为单独的方法,您可以将上述内容作为该方法的主体,并带有“...”= new [] {movieDetail};

于 2012-07-28T00:06:18.630 回答
0

较短的版本

 public List<MovieDetails> ConvertFacebookMovieToStandardMovie(List<FacebookMovie> lstFacebookMovieDetails)
{
    return lstFacebookMovieDetails.ConvertAll(ConvertFacebookMovieToStandardMovie);
 }

根据msdn

将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表。

于 2012-07-28T00:12:33.267 回答