Избегать повторения в объявлениях, которые содержат различные внутренние символы - PullRequest
1 голос
/ 18 марта 2019

Есть ли способ избежать повторения, когда вы объявляете несколько экземпляров одного и того же типа, между которыми есть что-то различное? объявлять фиксированные операторы только один раз, затем объявлять внутренние переменные внутри них несколько раз, без использования каких-либо методов

  • Использовать методы просто, я пытаюсь достичь этого только в объявлении класса.

Предположим, мы должны объявить несколько Strings следующим образом:

String A = "You found a" + "Common" + "card";
String B = "You found a" + "Rare" + "card";
String C = "You found a" + "Legendary" + "card";

Итак, я хочу объявить "You found a" и "card" только один раз и объявить A, B и C только с символом внутренней переменной (хотя, разумеется, имея повторяющиеся операторы И не используя никаких методов) .

Я написал приведенный выше код как более простой экземпляр, который может помочь мне найти решение в array, например:

AudioClip[] audioClips = 
{
    (AudioClip)Resources.Load("Audios/audio1.mp3", typeof(AudioClip)),
    (AudioClip)Resources.Load("Audios/audio2.mp3", typeof(AudioClip)),
    (AudioClip)Resources.Load("Audios/audio3.mp3", typeof(AudioClip)),
};

// This is Unity by the way, just a sample

Как вы можете видеть, у нас есть входы массива с одной строкой кода, в которой есть только один символ переменной внутри их Strings.

Так есть ли способ получить что-то вроде этого:

//Imaginary code:

String A = /* You found a */ "common" /* card */'
String B = /* You found a */ "Rare" /* card */;
String C = /* You found a */ "Legendary" /* card */;

и во втором:

AudioClip[] audioClips = 
{
    /* (AudioClip)Resources.Load("Audios/audio */ 1 /* .mp3", typeof(AudioClip)) */,
    /* (AudioClip)Resources.Load("Audios/audio */ 2 /* .mp3", typeof(AudioClip)) */,
    /* (AudioClip)Resources.Load("Audios/audio */ 1 /* .mp3", typeof(AudioClip)) */,
};

// The commented statements with /*, */ are what need to be there 
// without being written multiple times in each.

Так есть ли решение? Я сказал, что не использую никаких методов, но если это возможно только с помощью методов, как это сделать в AudioClip array.

Ответы [ 2 ]

4 голосов
/ 18 марта 2019

Вы можете использовать const строку с заполнителями для значений, которые вы хотите заменить, затем используйте string.Format, чтобы выполнить замену, когда вам это необходимо, например:

const string FoundCardMessage = "You found a {0} card";

private static void Main(string[] args)
{
    var cardTypes = new List<string> {"Common", "Rare", "Legendary"};

    foreach (var cardType in cardTypes)
    {
        var message = string.Format(FoundCardMessage, cardType);
        Console.WriteLine(message);
    }
}

Выход

enter image description here

3 голосов
/ 18 марта 2019

Считается ли это "использованием методов"?

AudioClip[] audioClips = 
    Enumerable.Range(1,3)
              .Select( i => (AudioClip)Resources.Load("Audios/audio" + i + ".mp3", typeof(AudioClip)))
              .ToArray();

Вы можете сделать это немного более необычным, используя интерполяцию, форматирование, что угодно, но это суть.

...