C# 如何使用匿名方法或匿名类型减少此代码?

C# 如何使用匿名方法或匿名类型减少此代码?,c#,static,thread-safety,anonymous-methods,C#,Static,Thread Safety,Anonymous Methods,我有一个web服务和一些方法,我不想使用下面的代码,因为我打算在静态(我已经读过)不是线程安全的多线程应用程序中使用这些代码 因此,我现在所做的只是在我的web服务方法“myWebMethod”的主体中,在第//1/3点、第//2/3点和第//3/3点重复下面静态方法“returnisTrue()”中的代码。这很好,但会导致代码膨胀。有没有一种更简洁的方法,使用函数式编程或匿名方法,或者我可以使用的其他方法 注意,当我试图在方法中创建一个类时,编译器阻塞了…这本可以解决我的问题 正如我所说的,我

我有一个web服务和一些方法,我不想使用下面的代码,因为我打算在静态(我已经读过)不是线程安全的多线程应用程序中使用这些代码

因此,我现在所做的只是在我的web服务方法“myWebMethod”的主体中,在第//1/3点、第//2/3点和第//3/3点重复下面静态方法“returnisTrue()”中的代码。这很好,但会导致代码膨胀。有没有一种更简洁的方法,使用函数式编程或匿名方法,或者我可以使用的其他方法

注意,当我试图在方法中创建一个类时,编译器阻塞了…这本可以解决我的问题

正如我所说的,我现在拥有的代码工作正常,但它过于臃肿,因为我重复了三次“静态”方法“returnisTrue”

多谢各位

编辑:为了回答一些关于使我的静态方法线程安全的问题,我不想麻烦这些问题,但是为了得到一个解决方案,我在下面介绍了这些问题

所有这些代码都是web服务中的服务器端代码

// I cannot unfortunately use this static method below--not thread safe
static private bool returnisTrue()
{
  bool isTrue = false;
  // do a bunch of stuff here
  return isTrue;
}

public  bool myWebMethod (string XYZ)
{
  //public Class myClassReturnisTrue  { … }  //will not compile

  bool isTrueOrNot1 = returnisTrue(); //1 of 3

  /// more code here

  bool  isTrueOrNot2 = returnisTrue(); //2 of 3

  ///more code here

  bool isTrueOrNot3 = returnisTrue(); //3 of 3

  return isTrueOrNot1 && isTrueOrNot2 && isTrueOrNot3;
}
 // here is the static method 'returnisTrue' it looks something like this:


 static private bool returnIsTrue(string A, string B)
 {
 if (A.Length() < B.Length())
     {
return true;
     }
else
return false;

 }
//不幸的是,我不能使用下面的静态方法--这不是线程安全的
静态私有布尔返回函数()
{
布尔isTrue=假;
//在这里做一堆事情
回归真实;
}
公共bool myWebMethod(字符串XYZ)
{
//公共类myClassReturnisTrue{…}//将不会编译
bool isTrueOrNot1=returnisTrue();//第1个,共3个
///这里有更多代码
bool isTrueOrNot2=returnisTrue();//第2个,共3个
///这里有更多代码
bool isTrueOrNot3=returnisTrue();//3/3
返回isTrueOrNot1&&isTrueOrNot2&&isTrueOrNot3;
}
//下面是静态方法“returnisTrue”,它看起来像这样:
静态私有布尔返回函数(字符串A、字符串B)
{
如果(A.Length()
如果您
锁定
关键部分(您可能想在msdn上查找它),您应该能够使用静态方法。

如果您
锁定
关键部分(您可能想在msdn上查找它),您应该能够使用静态方法。

您在静态方法中实际做了什么?您是在修改任何全局状态还是只处理局部变量?使用静态方法,甚至变量都没有错,只要您采取适当的措施确保其中的代码实际上是线程安全的

静态方法和实例方法都可能是不安全的,这取决于您在它们内部执行的操作。要问的主要问题是,您是否正在访问方法中多个线程之间可以访问的任何数据?如果是这样,为什么不将方法更改为线程安全的(例如通过锁定)

以.NET framework本身为例,它始终包含各种静态线程安全方法

编辑:


好的,现在我们已经看到了您的方法——它确实已经是线程安全的了。该方法未访问任何共享数据,并且字符串被删除

在静态方法中,您实际上在做什么?您是在修改任何全局状态还是只处理局部变量?使用静态方法,甚至变量都没有错,只要您采取适当的措施确保其中的代码实际上是线程安全的

静态方法和实例方法都可能是不安全的,这取决于您在它们内部执行的操作。要问的主要问题是,您是否正在访问方法中多个线程之间可以访问的任何数据?如果是这样,为什么不将方法更改为线程安全的(例如通过锁定)

以.NET framework本身为例,它始终包含各种静态线程安全方法

编辑:


好的,现在我们已经看到了您的方法——它确实已经是线程安全的了。该方法未访问任何共享数据,并且字符串被删除

为什么不重构
returnisTrue
使之成为线程安全的呢?没有足够的信息来解决标题中的问题。@Richard--谢谢你的回答。我认为锁有性能代价——因为这种静态方法每秒会被评估几千次。从J.Kommer看来,静态方法是线程安全的。奇怪的是,C#没有简单的内联功能来解决这个问题。哦,好吧。。。这一次我很幸运。为什么不重构
returnisTrue
以实现线程安全?没有足够的信息(没有可能的lambda或匿名类型)来解决标题中的问题。@Richard--谢谢你的回答。我认为锁有性能代价——因为这种静态方法每秒会被评估几千次。从J.Kommer看来,静态方法是线程安全的。奇怪的是,C#没有简单的内联功能来解决这个问题。哦,好吧。。。这一次我很幸运。@J.Kommer--好的,如果100万人访问这个静态方法,请看我的编辑。它是线程安全的吗?tx@J.Kommer--多谢各位。事实上,它们是MyWebMethod的局部变量。为什么它应该是线程安全的,这一点都不明显,但我相信你的话,并做更多的研究。从另一条评论来看,anon.methods作为解决方案似乎不明确,因此我将您的回答标记为答案。@J.Kommer--我不想将此作为关于字符串的教程,但我听说如果您处于循环中,您应该使用新的Stringbuilder()而不是字符串,因为字符串会消耗内存。然而,在这里,我假设即使静态方法每秒会被访问数千次,并且每次只会创建一个不可变字符串,这取决于您在循环中执行的操作,但我们并不是真正处于循环中。如果要执行大量字符串操作(例如