相关疑难解决方法(0)

在资源文件中使用'switch'和字符串

我的资源(.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语句中使用字符串集合.但后来我需要确保我enumstrings资源文件绑在一起.我想知道一个巧妙的方法.

编辑:在研究如何使用时 也找到了这个很好的答案Action:

.net c# embedded-resource switch-statement

15
推荐指数
2
解决办法
7458
查看次数

C#中的默认委托

C#中默认委托的名称是什么,它不带参数并返回void?我记得有一个代表,但我不记得它的名字.

c# delegates

11
推荐指数
3
解决办法
6568
查看次数

CheckForIllegalCrossThreadCalls =的分歧

我最近更新了一个从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# thread-safety visual-studio-2008

5
推荐指数
1
解决办法
6152
查看次数

为什么Action <T>和Predicate <T>被使用或定义为委托?

有人可以解释在C#中使用Action<T>Predicate<T>作为代理的原因是什么

c# delegates

4
推荐指数
1
解决办法
572
查看次数

C#中代表的实现

我正在尝试学习如何在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)

c# delegates

3
推荐指数
1
解决办法
2724
查看次数

使用大量ifs简化代码

我有一个基于枚举的方法,并且在开始时我们有这种情况:

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)

你会如何优化这种代码(它不是我的代码)?

c# optimization simplify

0
推荐指数
2
解决办法
728
查看次数