避免在具有内部不同字符的声明中重复
Avoiding repetition in declarations that have inner different characters
有什么方法可以避免重复声明同一类型的多个实例,而这些实例之间存在差异?只声明一次固定语句,然后在不使用任何方法的情况下多次声明其中的内部变量
- 使用方法很简单,我试图仅在 class 声明中实现。
假设我们必须像这样声明多个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
中如何做到这一点。
这算作"using methods"吗?
AudioClip[] audioClips =
Enumerable.Range(1,3)
.Select( i => (AudioClip)Resources.Load("Audios/audio" + i + ".mp3", typeof(AudioClip)))
.ToArray();
您可以通过使用插值、格式化等方式使它更漂亮一些,但这就是要点。
您可以使用带占位符的 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);
}
}
输出
有什么方法可以避免重复声明同一类型的多个实例,而这些实例之间存在差异?只声明一次固定语句,然后在不使用任何方法的情况下多次声明其中的内部变量
- 使用方法很简单,我试图仅在 class 声明中实现。
假设我们必须像这样声明多个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
中如何做到这一点。
这算作"using methods"吗?
AudioClip[] audioClips =
Enumerable.Range(1,3)
.Select( i => (AudioClip)Resources.Load("Audios/audio" + i + ".mp3", typeof(AudioClip)))
.ToArray();
您可以通过使用插值、格式化等方式使它更漂亮一些,但这就是要点。
您可以使用带占位符的 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);
}
}
输出