gpt4 book ai didi

c# - 如何扩展 C# 类

转载 作者:行者123 更新时间:2023-11-30 18:50:33 25 4
gpt4 key购买 nike

我有类似的代码

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/

25 4 0
文章推荐: c - 我的 Linux 代码中的 C 段错误
文章推荐: c# - 将 5 个 List 组合成一个 List