Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 C#除键外的集合中的ConcurrentDictionary设置值_C# 4.0 - Fatal编程技术网

C# 4.0 C#除键外的集合中的ConcurrentDictionary设置值

C# 4.0 C#除键外的集合中的ConcurrentDictionary设置值,c#-4.0,C# 4.0,在这次关闭之前,请仔细检查我的代码 下面的代码工作,但似乎非常黑客,我正在寻找建议,以实现同样的事情与清洁的代码或是这是因为它得到好 调用Add和Remove的代码将来自可能同时访问代码的不同线程,因此它必须保持线程安全 using System; using System.Collections.Concurrent; namespace Server { public class Company { public string Name { get; set

在这次关闭之前,请仔细检查我的代码

下面的代码工作,但似乎非常黑客,我正在寻找建议,以实现同样的事情与清洁的代码或是这是因为它得到好

调用Add和Remove的代码将来自可能同时访问代码的不同线程,因此它必须保持线程安全

using System;
using System.Collections.Concurrent;

namespace Server
{
    public class Company
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public ConcurrentDictionary<string, Employee> Employees = new ConcurrentDictionary<string, Employee>();
    }

    public class Employee
    {
        public string First { get; set; }
        public string Last { get; set; }
        public string Ext { get; set; }
    }

    public class Clients
    {
        public ConcurrentDictionary<string, Company> CompaniesDict = new ConcurrentDictionary<string, Company>();


        public bool Add_Company(string ID, string Name, string Address, string Phone) //This function works
        {

            Company MyCompany = new Company();
            Employee MyEmployees = new Employee();

            MyCompany.Name = Name;
            MyCompany.Address = Address;
            MyCompany.Phone = Phone;
            MyCompany.Employees = MyEmployees;

            return CompaniesDict.TryAdd(ID, MyCompany);

        }

        public bool Remove_Company(string ID) //This function works
        {

            return CompaniesDict.TryRemove(ID, Company tCompany);

        }

        //This is were I need the help this seems so hacked. Im not trying to update the key, but the value intstead
        public bool Set_CompanyName(string ID, string Name) 
        {

            CompaniesDict.TryGetValue(ID, out Company oCompany);

            Company nCompany;
            nCompany = oCompany;
            nCompany.Name = Name;

            return CompaniesDict.TryUpdate(ID, nCompany, oCompany);
        }

        public string Get_CompanyName(string ID)
        {

            CompaniesDict.TryGetValue(ID, out Company tCompany);

            return tCompany.Name;
        }


    }
}
使用系统;
使用System.Collections.Concurrent;
命名空间服务器
{
公营公司
{
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公用字符串电话{get;set;}
public ConcurrentDictionary Employees=新建ConcurrentDictionary();
}
公营雇员
{
第一个公共字符串{get;set;}
公共字符串Last{get;set;}
公共字符串Ext{get;set;}
}
公共类客户机
{
public ConcurrentDictionary CompanysDict=新的ConcurrentDictionary();
public bool Add_Company(字符串ID、字符串名称、字符串地址、字符串电话)//此函数有效
{
公司MyCompany=新公司();
Employee MyEmployees=新员工();
MyCompany.Name=名称;
MyCompany.Address=地址;
MyCompany.Phone=电话;
MyCompany.Employees=我的员工;
返回公司dict.TryAdd(ID,MyCompany);
}
public bool Remove_Company(字符串ID)//此函数有效
{
返回CompaniesDict.TryRemove(ID,Company t Company);
}
//这是我需要的帮助,这似乎是如此黑客。我没有试图更新的关键,但值intstead
public bool Set_CompanyName(字符串ID、字符串名称)
{
公司指令TryGetValue(ID,外部公司/公司);
公司;
N公司=O公司;
nCompany.Name=名称;
返回公司记录更新日期(ID、nCompany、oCompany);
}
公共字符串Get_CompanyName(字符串ID)
{
CompaniesDict.TryGetValue(ID,公司外公司);
返回tCompany.Name;
}
}
}
请不要只是关闭此链接,并将我链接到一些无用的代码,您称之为重复代码。抱歉这么直言不讳,但这是最近发生在我身上的一个同事在这个网站上的编码。如果你有问题,我可以回答,以便你可以完全帮助我,请问他们


提前感谢您的帮助。

在更新对象上的字段时,有一种更简单的方法。 请注意,我当前的电脑上没有安装C#,因此无法验证

请注意,我声明了out参数,但没有构造一个会立即销毁的新参数,我修改了对象本身。 i、 e

不是

公司=新公司()

如果多个线程调用SetCompanyName(),这仍然是不确定的,因为新名称会在活动对象上更新,并且可能存在竞争条件。但是,添加和删除操作将被禁用,即使删除操作在更新公司实例名称之前删除了该实例

public bool Set_CompanyName(string ID, string Name) 
{
   Company company; 
   var retval= CompaniesDict.TryGetValue(ID, out company)
   if (retval) {
       company.Name=Name; // Update your company object directly
    }
//else Do something such as throw an exception if it's not found
    return retval;
 }

您不应该构造将被覆盖为“out”参数的对象。我相信我已经在上面的代码中纠正了这一点,我对C还是非常陌生的#
public bool Set_CompanyName(string ID, string Name) 
{
   Company company; 
   var retval= CompaniesDict.TryGetValue(ID, out company)
   if (retval) {
       company.Name=Name; // Update your company object directly
    }
//else Do something such as throw an exception if it's not found
    return retval;
 }