如何向FormattedString添加新方法?

时间:2017-11-09 10:24:41

标签: c#

在我的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的功能来实现这个目的?

2 个答案:

答案 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); AddGraySpanAddBlueSpan。我还会从每个扩展方法返回原始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... 
    }
}