2016-07-15 10 views
0

私はある種の小さなRPG(ロールプレイングゲーム)をやっています。会話では、プレーヤーの特定の変数に影響を与える決定があります。より速くそれを行うための方法はあります...あなたが見ることができるように関数パラメータとしての変数?

public string Name, Nickname; 
public int Age; 

public void Decision(string Var, string Input) 
{ 
    if (Var == "Name") 
     Name = Input; 
    else if (Var == "Nickname") 
     Nickname = Input; 
    else if (Var == "Age") 
     Age = Convert.ToInt32(Input); 
} 

、それが唯一の3つの変数のためにかなり長いですが、もっとあります:私はあなたが私のものよりも効果的な方法を知っていた場合には不思議でしたか?このような何か:

public void Decision(Variable Var, string Input) 
{ 
    Player.Var = input; 
} 

編集:私は2つの答えのミックスを使用します。

public string Nom, Prenom; 
    public int Age; 

    public void Decision(InfoType type, string Input) 
    { 
     switch (type) 
     { 
      case InfoType.Name: 
       Nom = Input; 
       break; 
      case InfoType.Prenom: 
       Prenom = Input; 
       break; 
     } 
    } 
    public void Decision(InfoType type, int Input) 
    { 
     switch (type) 
     { 
      case InfoType.Age: 
       Age = Convert.ToInt32(Input); 
       break; 
     } 

    } 
+0

'オブジェクト 'を渡しますか? – melancia

+2

'int Age'は決して' == string Var'ではありません。これを代わりに使ってみましょう 'if(Age == Convert.ToInt32(Var){Age = Convert.ToInt32(Input);}' –

+2

あなたが "Var"の値を渡すことができるのであれば、どの変数を変更したいのか分かります。 –

答えて

0

あなたはswitch文で物事はもう少し簡潔にしてもタイプに列挙型を使用することができます安全性。例えば

public enum InfoType { 
    Name, 
    Nickname, 
    Age 
} 

pubic void Decision(InfoType type, string input) 
{ 
    switch (type) 
    { 
     case InfoType.Name: 
     Name = input; 
     break; 
     case InfoType.NickName: 
     NickName = input; 
     break; 
    } 
} 

など。

+0

ねえ、私はこれをやろうと思う。 –

0

方法のオーバーロードはどうですか?

public void Decision(string Var, string Input) 
{ 
    if (Var == "Name") 
     Name = Input; 
    else if (Var == "Nickname") 
     Nickname = Input; 
} 

public void Decision(int Input) 
{ 
    Age = input 
} 
+0

Ianのenumとcase文を活用した例も、型の安全性を強く推奨します –

0

あなたはおそらく反射を使用することができます。これの欠点は、複雑な型の追加チェックが必要になることですが、単純なオブジェクトの場合はこのように動作します。

public class MyObject { 
    public string Name { get; set; } 
    public string Nickname { get; set; } 
    public int Age { get; set; } 
} 

public class TestReflection { 
    public void Test() { 
     var obj = new MyObject(); 

     UpdateObject(obj, "Name", "THis is a name"); 
     UpdateObject(obj, "Age", 99); 
     UpdateObject(obj, "Nickname", "This is a nickname"); 

     Console.WriteLine("{0} {1} {2}", obj.Name, obj.Age, obj.Nickname); 
     Console.ReadLine(); 
    } 

    private void UpdateObject(MyObject obj, string varName, object varValue) { 
     //Get Properties of the object 
     var properties = obj.GetType().GetProperties(); 
     //Search for the property via the name passed over to the method. 
     var prop = properties.FirstOrDefault(_ => _.Name.Equals(varName, StringComparison.InvariantCultureIgnoreCase)); 
     //Check prop exists and set to the object. 
     if(prop != null) { 
      prop.SetValue(obj, varValue); 
     } 
    } 
} 
関連する問題