2017-08-03 12 views
2

私は何を私が探しているあなたを伝えるために、この例を持っている:私はこのようにそのメソッドを呼び出すことができる方法を見つけたいパラメータを単一オブジェクトとして渡すにはどうすればいいですか?

private void myMethod(string a = "", string b = "", string c = "") 
{ 
    // do things 
} 

MyParameterObject parameters = new MyParameterObject(); 
// b is the name of parameter 
parameters.AddParameter("b", "b_value"); 
parameters.AddParameter("c", "c_value"); 
myMethod(parameters); 
+0

'List '? – Liam

+1

3つの文字列を保持できるオブジェクトを定義するだけですか?問題はどこですか? – Nico

+0

私は、パラメータ@Nicoの可変量があると思いますか? – Liam

答えて

5

すべてのパラメータ値場合この方法で必要な、あなたは、次のようなDictionaryとしてパラメータを渡すことができます(それはstringも聞かせて)同じ種類のものである:

private void myMethod(Dictionary<string,string> paramDictionary) 
{ 
    // do things 
} 

あなたはこのようなメソッドを呼び出すことができるように:

Dictionary<string,string> paramDictionary = new Dictionary<string,string>(); 
paramDictionary.Add("b", "b_value"); 
paramDictionary.Add("c", "c_value"); 
myMethod(paramDictionary); 
3

は、キー値のペアを作成し、プロパティは、クラスを作成してプロパティを割り当てるその後、知られている場合は機能

List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>() 
{ 
    new KeyValuePair<string, string>("a", "a_value"), 
    new KeyValuePair<string, string>("b", "b_value"), 
    new KeyValuePair<string, string>("c", "c_value"), 
}; 


public void myMethod(KeyValuePair<string, string>[] pairs) 
{ 
    // Read key value pair 
    // ... 
} 

にそれを渡します。

+0

私はその最後の文章を強調して、それは最高の解決策です(プロパティが実際に分かっている場合) – EpicKip

1

さまざまな他の人に記載されているように、あなたの問題が本当にわからないが、ここには2つの可能性がある。

まず:セカンド辞書

Dictionary<string,string> paramDictionary = new Dictionary<string,string>(); 
paramDictionary.Add("b", "b_value"); 
paramDictionary.Add("c", "c_value"); 
myMethod(paramDictionary); 

を使用する:

public class ParameterObject{ 

    private string firstName, lastName; 
    public string FirstName { get { return firstName; } set { firstName = value; } } 
    public string LastName { get { return lastName; } set { lastName = value; } }  
    // and so on 

    public ParameterObject(){ 
    // leave it empty or create it with parameters 
    } 

} 

ニーズに合ったオブジェクトを作成し、その後、ちょうどあなたの例のように、それを使用します。

ParameterObject parameters = new ParameterObject(); 
parameters.setFirstName("b_value"); 
parameters.setLastName("c_value"); 
myMethod(parameters); 

あなたは、このような方法でそれを使用することができ、このオブジェクトを定義しているので:

myMethod(ParameterObject parameter){ 

String firstName = parameter.getFirstName(); 
String lastName = parameter.getLastName(); 

} 
+0

@ un-luckyによって提案された辞書が最良の選択であり、あなたの提案にも感謝します。 – Adnand

1

あなたは提案のような辞書を使用して、辞書からのパラメータ配列を構築し、インスタンスからメソッドを呼び出すために、メソッド呼び出しを作ることができますあなたは

public static class Invoker 
{ 
    public static void Invoke<TClass>(string methodName, Dictionary<string, object> myParameterObject, TClass instance) 
    { 
     var method = typeof(TClass).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); 
     var parameters = method.GetParameters().Select(parameter => myParameterObject.ContainsKey(parameter.Name) ? myParameterObject[parameter.Name] : null).ToArray(); 

     method.Invoke(instance, parameters); 
    } 
} 

。にパスし、自分のMyClassがMyMethodは

が含まれますと仮定

var parameters = new Dictionary<string, object> { { "b", "b_value" }, { "c", "c_value" } }; 

var myClass = new MyClass(); 
Invoker.Invoke("MyMethod", parameters, myClass); 
Console.ReadKey(); 

のようにそれを呼び出します

public class MyClass 
{ 
    private void MyMethod(string a = "", string b = "", string c = "") 
    { 
     Console.WriteLine("a : " + a + " b : " + b + " c : " + c); 
    } 
} 

これは非常に誤りがちですが、反射スキルの練習としては便利ですが、

関連する問題