2012-04-21 14 views
2

このコードスニペットで使用している文字列配列を初期化するより良い方法があるかどうかを調べようとしています。 コード内の空の文字列すべてを呼び出して代入する機能があるか、おそらくnewを使用しているのだろうかと疑問に思っていました。だから私は配列を作成すると同時にそれらを初期化することができます。文字列内に新しい文字列を初期化する

    foreach (var unit in unitList) 
        { 
         //Sort units by each army 
         string unitName = unit.UnitName; 
         armyUnits.Add(unitName, unit); 

         //Sort unit properties by unit 
         List<string> properites = new List<string>(); 

         string composition  =""; 
         string weaponSkill  =""; 
         string ballisticSkill  =""; 
         string strength   =""; 
         string initiative   =""; 
         string toughness   =""; 
         string wounds    =""; 
         string attacks   =""; 
         string leadership   =""; 
         string savingThrow  =""; 
         string specialRules  =""; 
         string dedicatedTransport =""; 
         string options   =""; 
         string armour    =""; 
         string weapons   =""; 


         properites.AddRange(new string[15]{ 

         composition   = unit.Composition, 
         weaponSkill   = unit.WeaponSkill, 
         ballisticSkill   = unit.BallisticSkill, 
         strength    = unit.Strength, 
         initiative    = unit.Initiative, 
         toughness    = unit.Toughness, 
         wounds     = unit.Wounds, 
         attacks    = unit.Attacks, 
         leadership    = unit.Leadership, 
         savingThrow   = unit.SaveThrow, 
         specialRules   = unit.SpecialRules, 
         dedicatedTransport  = unit.DedicatedTransport, 
         options    = unit.Options, 
         armour     = unit.Armour, 
         weapons    = unit.Weapons 
         }); 


        } 

編集: あなたは、アレイ内のnew String(unit.Composition.ToCharArray())を行うことができますようだから、見えます。私はこれ以上読むことができないと思います。

properites.AddRange(new string[1]{ 
    new String(unit.Composition.ToCharArray())} 
+0

なぜ「new String(unit.Composition.ToCharArray())」と書いていますか?あなたは "unit.Composition"と直接書くことができます。 – usr

+0

リストを使用する必要がありますか、または配列を直接使用できますか?私は私の答えに新しい選択肢を追加しました。 – usr

答えて

4
    foreach (var unit in unitList) 
        { 
         //Sort units by each army 
         string unitName = unit.UnitName; 
         armyUnits.Add(unitName, unit); 

         //Sort unit properties by unit 
         List<string> properites = new List<string>(); 

         properites.AddRange(new string[15]{ 

         unit.Composition, 
         unit.WeaponSkill, 
         unit.BallisticSkill, 
         unit.Strength, 
         unit.Initiative, 
         unit.Toughness, 
         unit.Wounds, 
         unit.Attacks, 
         unit.Leadership, 
         unit.SaveThrow, 
         unit.SpecialRules, 
         unit.DedicatedTransport, 
         unit.Options, 
         unit.Armour, 
         unit.Weapons 
         }); 


        } 

あなたはすべての変数を必要としません。実際には、あなたはリストを必要としません!

    var properties = new [] { 
         unit.Composition, 
         unit.WeaponSkill, 
         unit.BallisticSkill, 
         unit.Strength, 
         unit.Initiative, 
         unit.Toughness, 
         unit.Wounds, 
         unit.Attacks, 
         unit.Leadership, 
         unit.SaveThrow, 
         unit.SpecialRules, 
         unit.DedicatedTransport, 
         unit.Options, 
         unit.Armour, 
         unit.Weapons, 
        } 

リストは、ここで使用されないと思われる項目の追加と削除をサポートしています。また、配列数が15でなくても構いません。同じ理由で配列型も必要ありません。 C#はかなり簡潔な言語です!

また、すべてのリスト項目を対称にするために、 "unit.Weapons"の後に最後のコンマを追加しました。これはうまくコンパイルされ、コピー、貼り付け、並べ替えが簡単になります。

+0

ありがとうございます。 – Amicable

+0

これは、時間をかけて書いた非常に包括的な例です。 このリストを使用して、格納された値を参照するだけで、配列は正常に動作します。私が読んだことから実際のパフォーマンス上の利点はありませんが、素敵で素敵です! – Amicable

+1

パフォーマンス上のメリットは確かです(2つのオブジェクト割り当て、各アクセスごとの配列コピーと間接参照を保存します)。 – usr

3

また、AddRangeメソッドを使用する必要もありません。単純にコレクションの初期化構文を使用することができます。

//Sort unit properties by unit 
var properites = new List<string> 
        { 
         unit.Composition, 
         unit.WeaponSkill, 
         unit.BallisticSkill, 
         unit.Strength, 
         unit.Initiative, 
         unit.Toughness, 
         unit.Wounds, 
         unit.Attacks, 
         unit.Leadership, 
         unit.SaveThrow, 
         unit.SpecialRules, 
         unit.DedicatedTransport, 
         unit.Options, 
         unit.Armour, 
         unit.Weapons 
        }; 
+0

私にこの例を示してくれてありがとう!私はこれを読んだ後、MSDN上ではそれほど目立っていないことを確認しなければなりませんでした。実際に配列を使用する必要はないと思いました。 – Amicable

+0

これは良いことです。私は私の答え;-)を更新してこの解決策を改善しようとしました – usr

関連する問題