我的资源(.resx)文件中有一堆字符串.我试图直接使用它们作为switch语句的一部分(请参阅下面的示例代码).
class Test
{
static void main(string[] args)
{
string case = args[1];
switch(case)
{
case StringResources.CFG_PARAM1: // Do Something1
break;
case StringResources.CFG_PARAM2: // Do Something2
break;
case StringResources.CFG_PARAM3: // Do Something3
break;
default:
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看了一些解决方案,其中大多数似乎都暗示我需要将它们声明为const string我个人不喜欢的.我喜欢这个问题的最高投票解决方案:在switch语句中使用字符串集合.但后来我需要确保我enum和strings资源文件绑在一起.我想知道一个巧妙的方法.
编辑:在研究如何使用时
也找到了这个很好的答案Action:
我最近更新了一个从VS2003到VS2008的应用程序,我知道我将处理一系列"跨线程操作无效:控制'myControl'从一个线程访问,而不是它创建的线程"我在处理这个我所信奉的是正确的方法(参见下面的代码示例).我遇到了许多需要类似修复的控件.不希望为非UI线程访问的每个标签,文本框等都有类似的代码.仅为整个应用设置CheckForIllegalCrossThreadCalls = false会产生什么影响?
我找到了一个CodeProject文章,其中包含各种变通方法,并在底部发出警告,未设置该属性.我正在寻找关于这个问题的其他意见/经验.
private void ShowStatus(string szStatus)
{
try
{
if (this.statusBar1.InvokeRequired) { BeginInvoke(new MethodInvoker(delegate() { ShowStatus(szStatus); })); }
else { statusBar1.Panels[0].Text = szStatus; }
}
catch (Exception ex)
{
LogStatus.WriteErrorLog(ex, "Error", "frmMNI.ShowStatus()");
}
}
Run Code Online (Sandbox Code Playgroud)
我发现另一篇文章提出了一些可能的解决方案SO Question 2367718
有人可以解释在C#中使用Action<T>和Predicate<T>作为代理的原因是什么
我正在尝试学习如何在C#中有效地使用委托,我只是想知道是否有人可以指导我...以下是使用委托的示例实现...我所做的只是通过委托传递值从一个班级到另一个班级......请告诉我这是否是正确的实施方式......还有你的建议......
此外,请注意我已取消注册代表:
void FrmSample_FormClosing(object sender, FormClosingEventArgs e)
{
sampleObj.AssignValue -= new Sample.AssignValueDelegate(AssignValue);
}
Run Code Online (Sandbox Code Playgroud)
这是否需要取消注册?
以下是我写的代码..
public partial class FrmSample : Form
{
Sample sampleObj;
public FrmSample()
{
InitializeComponent();
this.Load += new EventHandler(FrmSample_Load);
this.FormClosing += new FormClosingEventHandler(FrmSample_FormClosing);
sampleObj = new Sample();
sampleObj.AssignValue = new Sample.AssignValueDelegate(AssignValue);
}
void FrmSample_FormClosing(object sender, FormClosingEventArgs e)
{
sampleObj.AssignValue -= new Sample.AssignValueDelegate(AssignValue);
}
void FrmSample_Load(object sender, EventArgs e)
{
sampleObj.LoadValue();
}
void AssignValue(string value)
{
MessageBox.Show(value);
}
}
class Sample
{
public delegate void AssignValueDelegate(string value);
public …Run Code Online (Sandbox Code Playgroud) 我有一个基于枚举的方法,并且在开始时我们有这种情况:
public void MyMetohd(Somestatus status)
{
if(status == Somestatus.Enum1)
{
DoA();
DoB();
DoC();
DoD();
DoE();
}
if(status == Somestatus.Enum2)
{
DoA();
DoB();
DoC();
DoD();
}
if(status == Somestatus.Enum3)
{
DoA();
DoB();
DoC();
}
if(status == Somestatus.Enum4)
{
DoA();
DoB();
}
if(status == Somestatus.Enum5)
{
DoA();
}
}
Run Code Online (Sandbox Code Playgroud)
你会如何优化这种代码(它不是我的代码)?