Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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中使用它#_C#_Visual Studio - Fatal编程技术网

C# 保存一个集合值并在c中使用它#

C# 保存一个集合值并在c中使用它#,c#,visual-studio,C#,Visual Studio,我正在尝试执行一个简单的操作,即设置文本值并使用get()访问它 场景:我正在VisualStudio中开发一个框架 private string saveValueName = ""; public string GetText() { return saveValueName; } public void SetText(string output) { DynamicValuesManager.Instan

我正在尝试执行一个简单的操作,即设置文本值并使用get()访问它

场景:我正在VisualStudio中开发一个框架

    private string saveValueName = "";
    public string GetText()
    {
        return saveValueName;
    }

    public void SetText(string output)
    {

        DynamicValuesManager.Instance.SaveValue(saveValueName, output, true);

    }
我的问题是: 1.我需要保存SetText中的值,并在下一步调用GetText()时使用它

您是否建议在此场景中使用getter/setter?

使用此选项:

private string saveValueName = "";
public string GetText()
{
    return this.saveValueName;
}

public void SetText(string output)
{

    this.saveValueName = output;

}
还有另一种处理方法。它在C#中称为属性。您可以这样做:

public string SaveValueName {get; set; }
通过这种方式,您可以轻松地为此设置值,而无需调用函数。例如,要设置值,可以执行以下操作:

// obj is the object of the class
obj.SaveValueName = "some value here";

这可以通过C#中的属性来实现

现在您可以通过调用该属性来使用它,如下所示:

obj.saveValueName = "a sample name";
Console.WriteLine(obj.saveValueName); // Outputs "a sample name"
有关更多信息,请参阅本文:

胡乱猜测(基于
DynamicValuesManager.Instance.SaveValue
调用):您可能正在寻找类似
字典和
索引器的东西:

  public class MyClass<T> {
    private Dictionary<string, T> m_Values = new Dictionary<string, T>();

    public T this[string name] {
      get {
        return m_Values[name];
      }
      set {
        if (m_Values.ContainsKey(name))
          m_Values[name] = value;
        else
          m_Values.Add(name, value);
      }
    }
  }

  ...

  var test = new MyClass<int>();

  test["abc"] = 1;
  test["x"] = 2;
  test["pqr"] = 55;

  Console.WriteLine(test["x"]);

只是为了进一步说明莫尔的答案。如果变量已设置,则不应写入变量

    private string saveValueName = "";
    public string GetText()
    {
        return this.saveValueName;
    }

    public void SetText(string output)
    {
        if (!string.Equals(output, saveValueName))
        {
            this.saveValueName = output;
        }
    }

另外,如果您使用MVVM样式,您将需要在设置变量时通知属性已更改。

为什么不使用属性???而不是使用
DynamicValuesManager.Instance.SaveValue(…)
,为什么您不能只执行简单的变量赋值:
saveValueName=output?我正在使用工具中的值,其中有一个特定的动态调用。感谢所有响应。通过您宝贵的回答,我能够识别出我的错误。输出变量在哪里?我将
输出
变量名更改为
保存值名
,然后将其编辑回原始命名。命名参数的方便方法是,它们表示它们所用于的对象!您正在为
saveValueName
设置值,因此最好也将该名称用作参数名称。为什么将
字符串的默认值设置为默认值以外的值是更好的做法?DynamicValuesManager.Instance.SaveValue(saveValueName,output,true);->此函数用于在动态调用期间将输出保存到saveValueName)@RufusL她将字符串保存到“”而不是string.Empty。此外,使用string.Empty对性能的影响较小,这使得代码更具可读性:if(saveValueName==string.Empty)比其他字符串比较函数的可读性更好
  public class MyClass<T> {
    private Dictionary<string, T> m_Values = new Dictionary<string, T>();

    public T this[string name] {
      get {
        return m_Values[name];
      }
      set {
        if (m_Values.ContainsKey(name))
          m_Values[name] = value;
        else
          m_Values.Add(name, value);
      }
    }
  }

  ...

  var test = new MyClass<int>();

  test["abc"] = 1;
  test["x"] = 2;
  test["pqr"] = 55;

  Console.WriteLine(test["x"]);
  using System.Dynamic;

  ... 

  dynamic test = new ExpandoObject();

  test.abc = 1;
  test.x = 2;
  test.pqr = 55; 

  Console.WriteLine(test.x);   
    private string saveValueName = "";
    public string GetText()
    {
        return this.saveValueName;
    }

    public void SetText(string output)
    {
        if (!string.Equals(output, saveValueName))
        {
            this.saveValueName = output;
        }
    }