避免在具有不同内部字符的声明中重复执行

时间:2019-03-18 20:41:41

标签: c# unity3d declaration

在声明同一类型的多个实例之间有差异的情况下,有什么方法可以避免重复?只声明一次固定语句,然后多次声明内部变量而不使用任何方法

  • 使用方法很简单,我试图仅在类声明中实现这一点。

假设我们必须像这样声明多个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 个答案:

答案 0 :(得分:4)

您可以将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

答案 1 :(得分:3)

这算作“使用方法”吗?

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

您可以通过使用插值,格式化或其他方式使它更加精美,但这就是要点。