C# 保存一个集合值并在c中使用它#
我正在尝试执行一个简单的操作,即设置文本值并使用get()访问它 场景:我正在VisualStudio中开发一个框架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
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;
}
}