2017-09-01 18 views
-4

まずは重複した場合はすみませます。私は正確にこれを検索する方法を知っていません。C#文字列に基づいて呼び出すメソッドを変更する

私はそう

MenuBar.Dock = Dockstyle.DockStyleString //DockStyleString is a string defined somewhere with either Top or Bottom 
+3

これを行うコードを記述してください。連鎖[if/else if/else](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/if-else)ステートメントを使用するか、 [switch文](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch)。あなたはこのコードを自分で書く必要があります。何かを試してみて、私たちはあなたのためにコードを書いていません。 –

+3

あなたの質問は不十分です。あなたができることを期待して、あなたが試みたコードの例はうまくいきません。 – Sam

+0

'if(menuBar.Dock ==" Bottom ")Dothis();それ以外の場合はDoSomeThingelse(); 「十分な情報を提供していないので、私たちができることはあまりありません。だから、あなたが得るどんな答えもあいまいです。 – HimBromBeere

答えて

2

を呼び出す方法の種類を変更するために保存された文字列を使用することができるようにする方法についての質問があり、あなたの例によると、あなたは、列挙子を使用しているように見えます。 Enumには、文字列を正しいenum値に変換するユーティリティがあります。また、あなたのためにそれを行うユーティリティクラスを持つことができます。

DockstyleUtils.FromString("DockStyleString"); 

これは、列挙型Dockstyle.DockstyleStringを返します。

だから、あなたはそれMenuBar.Dock = DockstyleUtils.FromString("DockStyleString");

は、私はあなたが使用することができますこの方法...

public DockStyle ConvertDockingStyleFromString(string dockingStyle) 
     { 
      return (DockStyle)Enum.Parse(typeof(DockStyle), dockingStyle); 
     } 
あり

あなたが行くを作成し使用することができます。

0

これは、いったん持っていれば、その文字列で何をしたいかによって異なります。 @ PepitoFernandezの答えにコードを使用して、列挙型に変換することができます。それを使用してオブジェクトに対してどのメソッドを呼び出すかを判断するには、いくつかのオプションがあります。あなたが最初の変換を行う場合、あなたはまた、列挙値でこれを置き換えることができます明らかに

switch (stringVariable) { 
    case "stringA": methodA(); break; 
    case "stringB": methodB(); break; 
    ... 
    // If you get a "bad" string, you WANT to throw an exception to make 
    // debugging easier 
    default: throw new ArgumentException("Method name not recognized"); 
} 

最初はそれが文字列の既知のセットだ場合、あなたはswitchステートメントを使用することができることです。

public class SomeClass 
    { 
     public void MethodA() 
     { 
      Console.WriteLine("MethodA"); 
     } 
    } 

    static void Main(string[] args) 
    { 
     Type type = typeof(SomeClass); 
     // Obviously, you'll want to replace the hardcode with your string 
     MethodInfo method = type.GetMethod("MethodA"); 

     SomeClass cls = new SomeClass(); 

     // The second argument is the parameters; I pass null here because 
     // there aren't any in this case 
     method.Invoke(cls, null); 
    } 
:あなたは

「悪い」の文字列を取得する場合、他のオプションは、(あなたが実行時に動的にそれをしたい場合)は、このような反射を使用して通話を行うことですので、(それは実際には悪い考えではありません

関連する問題