2012-02-21 52 views
0

我有一個類年齡屬性「AgeID」和「名」,而這個代碼:MVC多個同類機型

public static MvcHtmlString AgeToCommaSeparated(this HtmlHelper htmlHelper, IEnumerable<Age> AgeList) 
    { 
     var sb = new StringBuilder(); 
     foreach (var age in AgeList) 
     { 
      sb.Append(age.Name); 
      sb.Append(","); 
     } 

     return new MvcHtmlString(sb.ToString().TrimEnd(',')); 
    } 

然後,我有很多其他類的類同年齡,性別一樣用「GenderID」和「名稱」。

有沒有辦法使AgeToCommaSeparated函數通用,所以我可以傳遞任何類到它?

回答

0

你爲什麼不建立一個通用的接口,這樣的事情:

public interface ICommaSeparable 
    { 
     string Chunk { get; set; } 
    } 

    public class Age : ICommaSeparable 
    { 
     public string Chunk { get { return AgeID; } } 
     public string Name { get; set; } 
     public int AgeID { get; set; } 
    } 

    public class Gender : ICommaSeparable 
    { 
     public string Chunk { get { return GenderID ; } } 
     public string Name { get; set; } 
     public int GenderID { get; set; } 
    } 

    public static MvcHtmlString AgeToCommaSeparated(this HtmlHelper htmlHelper, IEnumerable<ICommaSeparable> SeparableList) 
    { 
     var sb = new StringBuilder(); 
     foreach (var sep in SeparableList) 
     { 
      sb.Append(sep.Chunk); 
      sb.Append(","); 
     } 

     return new MvcHtmlString(sb.ToString().TrimEnd(',')); 
    } 
+0

謝謝 - 如果Gender使用GenderID,Age使用AgeID而不是ID,並且需要引用ID從AgeToCommaSeparated函數? – user441365 2012-02-21 11:41:12

+0

我將所有內容委託給那裏使用的接口。查看更新。如果你不能或不想觸摸你的性別和年齡班,那麼你可以使用反思或Aliostad的建議。 – pangabiMC 2012-02-21 11:59:35

0

只需使用String.Join

String.Join(",", ageList.Select(x=>x.Name)); 

UPDATE

你可以做到這一點,讓您的生活更輕鬆,但小心,編譯和運行一個表達式是昂貴的(也就是MVC做什麼呢,但它使用緩存裏面):

public static class JoinExtensions 
{ 
    public static string Join<TModel, TProperty>(this IEnumerable<TModel> enumerable, Expression<Func<TModel, TProperty>> expression) 
    { 
     var compiled = expression.Compile(); 
     return string.Join(",", enumerable.Select(compiled)); 
    } 
} 


public class Age 
{ 
    public string Name { get; set; } 
} 

public class Gender 
{ 
    public string GenderId { get; set; } 
} 

現在你可以wri TE:

IEnumerable<Age> ages = new[] 
            { 
             new Age(){Name = "1"}, new Age(){Name = "2"}, new Age(){Name = "3"}, 
            }; 

Console.WriteLine(ages.Join(x => x.Name)); // outputs "1,2,3" 

你可以使用這個任何類。例如:

public class Gender 
{ 
    public string GenderId { get; set; } 
} 

然後:

IEnumerable<Gender> genders = new[] 
            { 
             new Gender(){GenderId = "16"}, new Gender(){GenderId = "22"}, new Gender(){GenderId = "35"}, 
            }; 

Console.WriteLine(genders.Join(x => x.GenderId)); 
+0

這不是我在問什麼。我問是否有辦法將性別傳遞給AgeToCommaSeparated函數以使其具有通用性 – user441365 2012-02-21 11:31:36

+0

請參閱我的更新請 – Aliostad 2012-02-21 11:45:46

相關問題