C# 管理静态属性的最佳方法

C# 管理静态属性的最佳方法,c#,static,thread-safety,C#,Static,Thread Safety,我有以下代码: public static class ProcessClass() { public static string MyProp {get;set;} public static void ProcessMethod(InputObject input) { if(String.IsNullOrEmpty(MyProp) MyProp = input.Name(); //do stu

我有以下代码:

public static class ProcessClass()
{
     public static string MyProp {get;set;}

     public static void ProcessMethod(InputObject input)
     {
         if(String.IsNullOrEmpty(MyProp)
              MyProp = input.Name();

         //do stuff

         MyProp = null;

     }   

 }
现在,除了
MyProp
之外的一切都已经就绪。我需要一种方法在整个代码中跟踪原始的
输入.Name
,因为它可以更改,而且
ProcessMethod
可能会在内部使用不同的
输入.Name
值进行调用,这是由于业务规则,我需要声明第二次调用来自
input.Name

显然,这是不好的,因为如果两个人同时这样做,他们都将共享相同的
MyProp
值,并且在最后简单地将is null设置为null似乎是危险的和令人讨厌的。我真的没有选择将这个方法更改为非静态的,因为这将涉及更改大量的代码库,而这实际上不是一个选择

使用静态属性,但仍然能够保留原始的
input.Name
值,而不冒线程安全问题的风险,有哪些方法可以避免?我想的一个选择是让每个方法都接受一个
输入。Name()
,track就是这样(并删除
MyProp
),但我可以想象,这会很快失控,而且非常混乱


我不需要将其作为属性,但如果它是属性,则显然需要在此类中是静态的。

因为它可能是一个多用户环境,然后将该字符串替换为
ConcurrentDictionary
,您可以将
输入.Name()
存储为
值和
键作为用户的唯一标识符(id、名称等)。

因为它可能是一个多用户环境,所以用
ConcurrentDictionary
替换字符串,在这里您将
input.name()
存储为
值和
键作为用户的唯一标识符(id、名称等).

我不知道这个问题的答案,但我强烈建议将
MyProp
或任何类似的解决方案设置为
private
,而不是
public
。这样至少可以消除它被
ProcessClass
之外的任何方法更改的可能性,从而降低失败的可能性基本上是这样。一般来说,这似乎是一个更大的设计问题的一部分。我不知道这个问题的答案,但我强烈建议您使用
MyProp
或任何类似的解决方案,而不是
public
。这样至少可以消除它被任何人更改的可能性方法,从而大大降低失败的可能性。一般来说,它似乎是更大设计问题的一部分。