gpt4 book ai didi

c# - C# 中的全局静态字典

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:11 50 4
gpt4 key购买 nike

我正在编写 C# 测试代码并在其中添加了新代码。有点困惑,需要帮助。这是一个骨架代码,而不是完整的代码。我正在寻找可以通过不同方法保持 test_dict key IP 和主机完整且仅更新 NET_MSG 值的解决方案。

public partial testclass
{
IDictionary<string, string> test_dict= new Dictionary<string, string>();
String ping_msg;

private void test1()
{
test_dict = develop.AddPing(ping_msg);
}

每次我用下面的方法在test_dict["NET_MSG"]中添加一条新消息,并打印test_dict时,我在test_dict<中只得到一个键test_dict["NET_MSG"] 并且我没有看到 IP 地址和主机。

我很困惑,因为我使用的是全局字典变量,一旦从 test1() 调用 test_dicttest_dict 就会有NET_MSGIPHOST 这三个键都正确。那么为什么每次如果我只更改 call_test 方法中 NET_MSG 键的值,我就会丢失另外两个键 IPHOST?

public void call_test1()
{
test_dict["NET_MSG"] = "Putting new message";
}

public void call_test2()
{
test_dict["NET_MSG"] = "Putting new message 2";
}

public void call_test3()
{
test_dict["NET_MSG"] = "Putting new message3";
}

在另一个文件中:

public static class develop
{
public static IDictionary<string, string> AddPing(String message)
{
IDictionary<string, string> new_ping = new Dictionary<string, string>();
new_ping["NET_MSG"] = message;
new_ping["IP"] = "192.168.111.111";
new_ping["HOST"] = "some_host_name";

return new_ping;
}
}

请帮助我解决这个问题,我们将不胜感激。

最佳答案

我认为您遗漏了有关何时创建新词典的信息。

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TrieQuestions
{
[TestClass]
public class UnitTest2
{
//1st new of Dictionary
IDictionary<string, string> test_dict= new Dictionary<string, string>();
private String ping_msg;
[TestMethod]
public void TestMethod1()
{
test_dict = develop.AddPing(ping_msg);
test_dict["NET_MSG"] = "Putting new message";
}
}

public static class develop
{

public static IDictionary<string, string> AddPing(String message)
{
//another new instance of the dictionary is created!!
IDictionary<string, string> new_ping = new Dictionary<string, string>();
new_ping["NET_MSG"] = message;
new_ping["IP"] = get_IP();
new_ping["HOST"] = get_host();

return new_ping;
}

private static string get_host()
{
return "host";
}

private static string get_IP()
{
return "ip";
}
}
}

我为你创建了这个测试代码,所以你明白你错过了什么。

如果您在单元测试中调用代码,它会为您工作。但是请注意评论,我补充说,你正在分配一个新字典两次,第一次调用测试,然后在你的静态类中再次调用,这意味着如果你写入第一个分配的字典,你将看到一个空字典。

如果您在 Debug模式下将 test_dict 添加到监视列表中,您还可以使用 make object Id 命令来查看您正在创建新实例。

如果你想解决它,你可以将原始字典作为参数传递给函数。

 public static void AddPing(String message, IDictionary<string, string> dict)
{
dict["NET_MSG"] = message;
dict["IP"] = get_IP();
dict["HOST"] = get_host();
}

或者请分享更多您的代码,以便我可以跟进您的流程。

关于c# - C# 中的全局静态字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52086006/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com