Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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#_Arrays_Parameters_Methods_Call - Fatal编程技术网

C# 有没有一种简单有效的方法可以用两个不同的参数调用同一个方法两次?

C# 有没有一种简单有效的方法可以用两个不同的参数调用同一个方法两次?,c#,arrays,parameters,methods,call,C#,Arrays,Parameters,Methods,Call,例如,假设我有以下字符串: var testString=Hello,world 我想调用以下方法: var newString=testString.ReplaceHello.Replaceworld 是否有一些代码结构可以简化这一过程,这样我只需指定一次替换方法,就可以一次性指定一组参数传递给它?您提出的任何结构都可能比您原来的文章更复杂。如果要传递大量不同的参数,可以构造这些参数的向量,并在执行调用时对其进行迭代。但是,对于您当前的示例,修改后的版本会更长,编写起来更复杂。重复两次的次数太

例如,假设我有以下字符串:

var testString=Hello,world

我想调用以下方法:

var newString=testString.ReplaceHello.Replaceworld


是否有一些代码结构可以简化这一过程,这样我只需指定一次替换方法,就可以一次性指定一组参数传递给它?

您提出的任何结构都可能比您原来的文章更复杂。如果要传递大量不同的参数,可以构造这些参数的向量,并在执行调用时对其进行迭代。但是,对于您当前的示例,修改后的版本会更长,编写起来更复杂。重复两次的次数太少了。

你提出的任何结构都可能比你原来的文章更复杂。如果要传递大量不同的参数,可以构造这些参数的向量,并在执行调用时对其进行迭代。但是,对于您当前的示例,修改后的版本会更长,编写起来更复杂。重复频率太小。

创建一个函数,将字符串和字典字符串、字符串传递给该函数。迭代字典中的每个项并输入string.ReplaceDictionaryEntry.Key、DictionaryEntry.Value。返回包含替换值的字符串


但是我只需要执行.Replace.Replace,如果只执行2次…

创建一个函数,将字符串和字典字符串传递给该函数。迭代字典中的每个项并输入string.ReplaceDictionaryEntry.Key、DictionaryEntry.Value。返回包含替换值的字符串


但是我只需要做.Replace.Replace,如果只需要2次…

您可以创建自己的Replace扩展方法,该方法采用IEnumerable参数。然后循环遍历迭代器并使用replace方法

然后你可以这样称呼它。替换新字符串[]{Matt,Joanne,Robert}

我想这个应该可以

public static string Replace(this string s, IEnumerable<string> strings, string replacementstring)
{
    foreach (var s1 in strings)
    {
        s = s.Replace(s1, replacementstring);
    }

    return s;
}

您可以创建自己的替换扩展方法,该方法采用IEnumberable参数。然后循环遍历迭代器并使用replace方法

然后你可以这样称呼它。替换新字符串[]{Matt,Joanne,Robert}

我想这个应该可以

public static string Replace(this string s, IEnumerable<string> strings, string replacementstring)
{
    foreach (var s1 in strings)
    {
        s = s.Replace(s1, replacementstring);
    }

    return s;
}

正如在其他帖子中所指出的,有很多方法


但一般来说,甜蜜=高效=可维护=简单。可能最好不要尝试,除非你在描述问题的背景时有其他原因。

如其他帖子所述,有很多方法


但一般来说,甜蜜=高效=可维护=简单。可能最好不要尝试,除非有其他原因,否则您描述问题的上下文。

另一个让问题更具可读性的方法是添加新行和适当的缩进,这对我来说是更好的选择:

var newString = testString.Replace("Hello", "")
                          .Replace("world", "")
                          .Replace("and", "")
                          .Replace("something", "")
                          .Replace("else","");

另一种使其更具可读性的方法是添加新行和适当的缩进,这对我来说是更好的选择:

var newString = testString.Replace("Hello", "")
                          .Replace("world", "")
                          .Replace("and", "")
                          .Replace("something", "")
                          .Replace("else","");

我不知道这是否更甜,但你可以:

string inputString = "Hello, world";
string newString = new[] { "Hello", "world" }.Aggregate(inputString, (result, replace) => result.Replace(replace, ""));
这将以输入字符串作为种子开始,并使用每个替换字符串运行函数

理解聚合函数的更好示例可能是:

List<Payment> payments = ...;
double newDebt = payments.Aggregate(oldDebt, (debt, payment) => debt - payment.Amount);

我不知道这是否更甜,但你可以:

string inputString = "Hello, world";
string newString = new[] { "Hello", "world" }.Aggregate(inputString, (result, replace) => result.Replace(replace, ""));
这将以输入字符串作为种子开始,并使用每个替换字符串运行函数

理解聚合函数的更好示例可能是:

List<Payment> payments = ...;
double newDebt = payments.Aggregate(oldDebt, (debt, payment) => debt - payment.Amount);

您可以使用正则表达式执行此操作,例如:

var newString = Regex.Replace(testString, "Hello|world", "");
如果您想从一个序列以编程方式构建正则表达式,应该是这样的:

var stringsToReplace = new[] { "Hello", "world" };
var regexParts = stringsToReplace.Select(Regex.Escape);
var regexText = string.Join("|", regexParts.ToArray());

您可以使用正则表达式执行此操作,例如:

var newString = Regex.Replace(testString, "Hello|world", "");
如果您想从一个序列以编程方式构建正则表达式,应该是这样的:

var stringsToReplace = new[] { "Hello", "world" };
var regexParts = stringsToReplace.Select(Regex.Escape);
var regexText = string.Join("|", regexParts.ToArray());

很多人都说应该使用IEnumerable、List和Array等,虽然这很好,但如果我是你,我宁愿使用C中的params关键字。如果我要实现像这样的东西——我可能不想为像double Replace方法调用这样简单的东西这么做……

很多人说你应该使用IEnumerable、List和Array等等,虽然这很好,但如果我是你,我宁愿在C中使用params关键字。但是,如果我要实现类似的东西——我可能不想为诸如double Replace方法调用之类的简单操作而这样做……

在某些语言中,例如python中,有reduce或fold函数的概念——这是一种表示列表中所有元素上的循环的函数方式

使用reduce,您可以编写如下内容

return reduce(lambda a, x: a.Replace(x, ''), ['hello', 'world'], initial) 这和

a = initial for x in ['hello', 'world']: a = a.Replace(x, '') return a 在python中,也可以将其发音为

reduce(str.replace, ['hello', 'world'], initial). 当然,这是否更简单
这完全是另一个问题,但很多人确实喜欢编写这样的代码。

在一些语言中,例如python中有reduce或fold函数的概念,这是表示列表中所有元素上循环的函数方式

使用reduce,您可以编写如下内容

return reduce(lambda a, x: a.Replace(x, ''), ['hello', 'world'], initial) 这和

a = initial for x in ['hello', 'world']: a = a.Replace(x, '') return a 在python中,也可以将其发音为

reduce(str.replace, ['hello', 'world'], initial).
当然,这是否更简单完全是另一个问题——但许多人确实喜欢编写这样的代码。

我看到这些模式有几个陷阱——首先,多次调用或在循环中调用不可变的字符串可能是不好的,特别是如果输入字符串很大的话。如果您执意要调用replace,那么至少要使用StringBuilder类中的replace方法。

我看到这些模式有几个陷阱——首先,多次调用replace或在循环中调用replace都是不可变的字符串可能是不好的,特别是如果您的输入字符串很大的话。如果您执意要调用replace,那么至少要在StringBuilder类中使用replace方法。

为什么要麻烦使用IEnumberable?不仅仅是使用params这个关键词?它很有效,但我觉得有点不确定。只有当我必须在很多地方一次性替换很多值时,我才会使用它。不过,我不能给出一个合适的例子来说明这一点。@Ray:看看这个方法的所有其他参数都是字符串,当你使用params string[]strings时,可能会感到困惑。为什么还要麻烦使用IEnumberable呢?不仅仅是使用params这个关键词?它很有效,但我觉得有点不确定。只有当我必须在很多地方一次性替换很多值时,我才会使用它。不过,我真的不能给出一个合适的例子来说明这一点。@Ray:看看这个方法的所有其他参数都是字符串,当您使用params string[]strings时,可能会感到困惑。