在我的C#代码中,我多次使用这种结构:
FormattedString s = new FormattedString();
s.Spans.Add(new Span { Text = "On the ", ForegroundColor = Color.FromHex("555555") });
s.Spans.Add(new Span { Text = "settings", ForegroundColor = Color.Blue });
我想将其简化为:
FormattedString s = new FormattedString();
s.Spans.AddGray("On the ");
s.Spans.AddBlue("settings");
甚至更好
s.AddGray("On the ");
s.AddBlue("settings");
有没有办法可以通过某种方式扩展FormattedString的功能来实现这个目的?
答案 0 :(得分:5)
您需要几个extension methods:
<div ng-if="loggedIn == false">
<div ng-include src="'partials/before_login_navigation.html'"> </div>
</div>
<div ng-if="loggedIn == true">
<div ng-include src="'partials/aftter_login_navigation.html'"> </div>
</div>
将公共逻辑移动到另一个允许指定颜色的扩展方法:
public static void AddGray(this FormattedString formattedString, string text)
=> formattedString.Add(text, Color.FromHex("555555"));
public static void AddBlue(this FormattedString formattedString, string text)
=> formattedString.Add(text, Color.Blue);
然后你可以添加彩色跨度:
public static void Add(this FormattedString formattedString, string text, Color color)
=> formattedString.Spans.Add(new Span { Text = text, ForegroundColor = color });
请注意,我会使方法的名称更具描述性 - s.AddGray("On the ");
s.AddBlue("settings");
s.Add("imprtant", Color.Red);
,AddGraySpan
,AddBlueSpan
。我还会从每个扩展方法返回原始AddSpan
实例。这将允许您使用流畅的API:
FormattedString
实施样本:
var s = new FormattedString().AddGraySpan("On the ").AddBlueSpan("settings");
答案 1 :(得分:0)
是的,您可以使用extension methods。
using System.Linq;
using System.Text;
using System;
namespace CustomExtensions
{
public static class FormattedStringExtension
{
public static void AddGray(this FormattedString formattedString, string x)
{
// TODO: Do something
}
public static void AddBlue(this FormattedString formattedString, string x)
{
// TODO: Do something
}
// etc...
}
}