[C#] switch ()를 사용하여 string.Contains ()를 사용하십시오.


Answers

아니, switch 문은 컴파일시의 상수가 필요합니다. message.Contains("test") 문은 메시지에 따라 참 또는 거짓을 평가할 수 있으므로 상수가 아니므로 switch 문에 'case'로 사용할 수 없습니다.

Question

내가 사용하는 C # 앱을하고있다.

if ((message.Contains("test")))
{
   Console.WriteLine("yes");
} else if ((message.Contains("test2"))) {
   Console.WriteLine("yes for test2");
}

switch() if() 문으로 변경하는 방법은 없을까요?




일부 사용자 정의 swtich는 이와 같이 만들 수 있습니다. 여러 사례를 실행할 수 있습니다.

public class ContainsSwitch
{

    List<ContainsSwitch> actionList = new List<ContainsSwitch>();
    public string Value { get; set; }
    public Action Action { get; set; }
    public bool SingleCaseExecution { get; set; }
    public void Perform( string target)
    {
        foreach (ContainsSwitch act in actionList)
        {
            if (target.Contains(act.Value))
            {
                act.Action();
                if(SingleCaseExecution)
                    break;
            }
        }
    }
    public void AddCase(string value, Action act)
    {
        actionList.Add(new ContainsSwitch() { Action = act, Value = value });
    }
}

이 전화주세요.

string m = "abc";
ContainsSwitch switchAction = new ContainsSwitch();
switchAction.SingleCaseExecution = true;
switchAction.AddCase("a", delegate() { Console.WriteLine("matched a"); });
switchAction.AddCase("d", delegate() { Console.WriteLine("matched d"); });
switchAction.AddCase("a", delegate() { Console.WriteLine("matched a"); });

switchAction.Perform(m);



이것은 C # 7에서 작동합니다.이 글을 쓰는 시점에서 아직 발표되지 않았습니다. 하지만이 코드를 올바르게 이해하면 이 코드가 작동합니다.

switch(message)
{
    case Contains("test"):
        Console.WriteLine("yes");
        break;
    case Contains("test2"):
        Console.WriteLine("yes for test2");
        break;
    default:
        Console.WriteLine("No matches found!");
}

출처 : https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/




Links