Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用开关映射两个字符串数组_C# - Fatal编程技术网

C# 不使用开关映射两个字符串数组

C# 不使用开关映射两个字符串数组,c#,C#,我有两个数组需要映射。编码 var result = "[placeholder2] Hello my name is [placeholder1]"; var placeholder = { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" }; var placeholderValue = { "placeholderValue3", "placeholderValue2", "placeholder

我有两个数组需要映射。编码

var result = "[placeholder2] Hello my name is [placeholder1]";
var placeholder = { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" };
var placeholderValue = { "placeholderValue3", "placeholderValue2", "placeholderValue3" };

Array.ForEach(placeholder , i => result = result.Replace(i, placeholderValue));

给定
i
占位符值
需要以智能方式设置。我可以实现一个switch语句。圈复杂度对于30个元素左右是不可接受的。要实现我的目标,什么是好的模式、扩展方法或其他方法?

最小的代码更改是只使用for循环,而不是ForEach,或者在您的例子中,ForEach使用lambda。使用for循环,您将在
placehoderValue
数组中获得相应值的索引

下一个改进是创建一个包含占位符及其值的对象数组,而不是需要保持同步的两个“并行”数组

比这更好,也更容易实现的是,只需拥有一个
字典
,其中键是占位符,值是占位符值。这基本上通过使用KeyValuePair类为您提供了上述建议(因此您无需自行创建)

此时,伪代码变为:

foreach(占位符字典中的键)将键替换为占位符字典[key]
我想您应该使用它来组合占位符及其值

var result = "[placeholder2] Hello my name is [placeholder1]";
var placeholder = new[] { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" };
var placeholderValue = new[] { "placeholderValue1", "placeholderValue2", "placeholderValue3", "placeholderValue4" };
var placeHolderPairs = placeholder.Zip(placeholderValue, Tuple.Create);

foreach (var pair in placeHolderPairs)
{
    result = result.Replace(pair.Item1, pair.Item2);
}

为了简单起见,我跳过了空检查

string result = "[placeholder2] Hello my name is [placeholder1]";
var placeHolders = new Dictionary<string, string>() { 
    { "placeholder1", "placeholderValue1" }, 
    { "placeholder2", "placeholderValue2" } 
};

var newResult =  Regex.Replace(result,@"\[(.+?)\]",m=>placeHolders[m.Groups[1].Value]);
string result=“[Placeholder 2]你好,我的名字是[Placeholder 1]”;
变量占位符=新字典(){
{“占位符1”,“占位符值1”},
{“占位符2”,“占位符值2”}
};
var newResult=Regex.Replace(结果,@“\[(.+?)\]”,m=>占位符[m.Groups[1].Value]);

因此,对于每个占位符,您将尝试用
占位符值1
占位符值2
占位符值3
中的每一个来替换它。为什么不使用
IDictionary
?这似乎是它的完美用途?不久前我也在做类似的事情@杰里米霍洛瓦茨-因为这将是一个过于简单和优雅的想法!或者,因为我没想到。我就知道你们会挺过来的。感谢您的帮助,尤其是MatchEvaluator的使用