通过传递引用类型的参数,可以更改引用本身的值,而不是其单个元素或字段的值。
有时,向方法指定精确数量的自变量这一要求是受限的。 通过使用 params 关键字来指示一个参数是一个参数
数组,可通过可变数量的自变量来调用方法。 使用 params 关键字标记的参数必须为数组类型,并且必须是该方
法的参数列表中的最后一个参数。
然后,调用方可通过以下四种方式中的任一种来调用方法:
传递相应类型的数组,该类型包含所需数量的元素。
向该方法传递相应类型的单独自变量的逗号分隔列表。
传递 null 。
不向参数数组提供参数。
以下示例定义了一个名为 GetVowels 的方法,该方法返回参数数组中的所有元音。 Main 方法演示了调用方法
的全部四种方式。 调用方不需要为包含 params 修饰符的形参提供任何实参。 在这种情况下,参数是一个空数
组。
using System;
using System.Linq;
class ParamsExample
{
static void Main()
{
string fromArray = GetVowels(new[] { "apple", "banana", "pear" });
Console.WriteLine($"Vowels from array: '{fromArray}'");
string fromMultipleArguments = GetVowels("apple", "banana", "pear");
Console.WriteLine($"Vowels from multiple arguments: '{fromMultipleArguments}'");
string fromNull = GetVowels(null);
Console.WriteLine($"Vowels from null: '{fromNull}'");
string fromNoValue = GetVowels();
Console.WriteLine($"Vowels from no value: '{fromNoValue}'");
}
static string GetVowels(params string[] input)
{
if (input == null || input.Length == 0)
{
return string.Empty;
}
var vowels = new char[] { 'A', 'E', 'I', 'O', 'U' };
return string.Concat(
input.SelectMany(
word => word.Where(letter => vowels.Contains(char.ToUpper(letter)))));
}
}
// The example displays the following output:
// Vowels from array: 'aeaaaea'
// Vowels from multiple arguments: 'aeaaaea'
// Vowels from null: ''
// Vowels from no value: ''
拓展方法使用:
/// <summary>
/// 获取输入单词,包含元音字符
/// </summary>
/// <param name="words"></param>
/// <returns></returns>
public string[] WhereVowel(params string[] words)
{
if (words == null || !words.Any())
{
return default;
}
var vowelChars = new char[] { 'a', 'e', 'i', 'o', 'u' };
return words.Where(w => w.ToArray().Intersect(vowelChars).Any()).ToArray();
}
/// <summary>
/// 获取输入字符中的元音字符
/// </summary>
/// <param name="words"></param>
/// <returns></returns>
public string SelectVowel(params string[] words)
{
if (words == null || !words.Any())
{
return default;
}
var vowelChars = new char[] { 'a', 'e', 'i', 'o', 'u' };
var vowelCharsArr = words.SelectMany(w =>
{
var destVowels = w.ToArray().Where(c => vowelChars.Contains(char.ToUpper(c))).ToList();
if (destVowels!=null && destVowels.Any())
{
destVowels.Add('|');
return destVowels;
}
else
{
return Array.Empty<char>().ToList();
}
});
return string.Join(',', vowelCharsArr);
}