我有类似的代码
IEnumerable<TwitterStatus> mentions = service.ListTweetsOnHomeTimeline();
RecentTweetList.ItemsSource = mentions;
我想做的是以某种方式添加到 TwitterStatus 1 个额外的属性来转换该类的 CreatedDate 以获取分钟数。 (我无法重新设计 TwitterStatus。)
所以我猜想这样做:
public class NewTwitterStatus : TwitterStatus
{
public string MinAgo
{
get
{
TimeSpan diff = DateTime.Now.Subtract(base.CreatedDate);
return diff.Minutes.ToString() + "m";
}
}
}
但我不知道如何进行转换?
IEnumerable<NewTwitterStatus > mentions = (????)service.ListTweetsOnHomeTimeline();
谢谢大家!
解决方案(基于 Chris 的建议):
IEnumerable<NewTwitterStatus> mentions = service.ListTweetsOnHomeTimeline().Select(x => new NewTwitterStatus(x));
RecentTweetList.ItemsSource = mentions;
public class NewTwitterStatus
{
TwitterStatus Data { set; get; }
public NewTwitterStatus(TwitterStatus ts)
{
Data = ts;
ts = null;
}
public string ProfileImageUrl
{
get
{
return Data.User.ProfileImageUrl;
}
}
public string ScreenName
{
get
{
return Data.User.ScreenName;
}
}
public string UserName
{
get
{
return Data.User.Name;
}
}
public string Text
{
get
{
return Data.Text;
}
}
public string MinAgo
{
get
{
TimeSpan diff = DateTime.Now.Subtract(Data.CreatedDate);
int mins = diff.Minutes * -1;
if (mins < 60)
return mins.ToString() + "m";
else
{
double h = mins / 60;
double m = mins % 60;
return h.ToString() + "h " + m.ToString() + "m";
}
}
}
最佳答案
您不能以这种方式扩展类 - 您收到的 TwitterStatus
实例根本没有您想要的属性。一种解决方法是使用扩展方法:
public static class TwitterExtensions
{
public static string MinutesAgo(this TwitterStatus status)
{
TimeSpan diff = DateTime.Now.Subtract(status.CreatedDate);
return diff.Minutes.ToString() + "m";
}
}
现在您可以在 TwitterStatus
实例上调用 MinutesAgo()
方法:
foreach(var status in mentions)
{
string howManyMinutesAgo = status.MinutesAgo();
}
编辑:
您应该能够使用扩展方法 - 另一种方法是使用 AutoMapper 等映射工具将 TwitterStatus
属性复制到您的扩展类中- 这将允许您使用自定义属性对扩展类实例进行数据绑定(bind)。虽然这是很多额外的工作(在计算上,通常不是为了编码),所以如果您能够改用扩展方法,我不会推荐它:
Mapper.CreateMap<TwitterStatus, NewTwitterStatus>();
IEnumerable<TwitterStatus> mentions = service.ListTweetsOnHomeTimeline();
IEnumerable<NewTwitterStatus> extendedMentions = mentions.Select(x=> Mapper.Map<NewTwitterStatus>(x));
关于c# - 如何扩展 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364083/