结合多种方法

时间:2019-08-02 07:19:34

标签: c#

我有两个功能,一个用于从包含特定字符串的(runOnUiThread())文件中获取随机单词,另一个用于获取不包含特定字符串的单词,

我现在想要的是获取包含说“ A”而不包含“ D”的随机词, 有没有办法以某种方式使用这两种方法来实现此目标而无需重写新方法?

我应该提到的是,这些用例只是两个示例,我还有许多其他功能可能需要将它们结合使用(获取具有特定长度的单词,获取具有起始字符的单词,等等)。 。所以我正在寻找一种通用的解决方案。

CSV功能:

GetRandomWordContaining

public static string GetRandomWordContainig(string word) { Debug.Log(word); TextAsset textAsset = Resources.Load<TextAsset>("Words"); string[] data = textAsset.text.Split(new char[] { '\n' }); string result = "NULL"; int randomMiddle = UnityEngine.Random.Range(5, data.Length); for (int i = randomMiddle; i < data.Length; i++) { data[i] = data[i].TrimEnd('\r', '\n'); data[i] = data[i].TrimStart('\r', '\n'); bool isAns = true; for(int j = 0; j < word.Length; j++) { if (!data[i].Contains(word[j].ToString())) { isAns = false; } } if (isAns) return data[i]; } for (int i = 0; i < randomMiddle; i++) { data[i] = data[i].TrimEnd('\r', '\n'); data[i] = data[i].TrimStart('\r', '\n'); bool isAns = true; for (int j = 0; j < word.Length; j++) { if (!data[i].Contains(word[j].ToString())) { isAns = false; } } if (isAns) return data[i]; } return result; } 功能:

GetRandomWordNotContainig

2 个答案:

答案 0 :(得分:3)

string类创建现有的方法Extension Methods,如下所示。

public static class StringExtensions
{
    public static string GetRandomWordContainig(this string s, string include)
    {
        // your method body.
        return s + yourResult;
    }

    public static string GetRandomWordNotContaining(this string s, string exclude)
    {
        // your method body.
        return s + yourResult;
    }

    // Add other extension methods that modify length, etc. and chain them.
}

现在像这样使用它:

var randomString = string.Empty
                         .GetRandomWordContainig("include")
                         .GetRandomWordNotContaining("exclude");

您可能还想通过流畅的界面签出builder pattern。这是一种面向对象的方法,如果要求包含和排除相同的单词,将使您更好地控制操作。

答案 1 :(得分:1)

不确定该用例是否需要第二个功能。

    string include = "A";
    string exclude = "D";

    string candidate = GetRandomWordContainig(include);

    while (candidate.Contains(exclude)){
      GetRandomWordContainig(include);
    }

    return candidate;